Jak zmienić nazwę plików w katalogu, takim jak następujący plik PMC21375.pdf.txt
:, muszę zmienić nazwę na 21375.txt
. tzn. muszę usunąć jedno PMC
i drugie pdf
z każdej nazwy pliku.
Jak zmienić nazwę plików w katalogu, takim jak następujący plik PMC21375.pdf.txt
:, muszę zmienić nazwę na 21375.txt
. tzn. muszę usunąć jedno PMC
i drugie pdf
z każdej nazwy pliku.
Odpowiedzi:
rename 's/(PMC|\.pdf)//g' *pdf.txt
Próbny :
$ ls *txt
PMC21375.pdf.txt
$ rename -n 's/(PMC|\.pdf)//g' *txt
PMC21375.pdf.txt -> 21375.txt
z shell
monitu. Jest to bardzo przydatne, możesz wstawić trochę kodu perla, tak jak ja, w podstawieniu.
Możesz usunąć -n
(przełącznik trybu pracy na sucho), gdy testy staną się ważne.
Istnieją inne narzędzia o tej samej nazwie, które mogą lub nie mogą tego zrobić, więc bądź ostrożny.
Jeśli uruchomisz następujące polecenie ( linux
)
$ file $(readlink -f $(type -p rename))
i masz wynik jak
.../rename: Perl script, ASCII text executable
to wydaje się być właściwym narzędziem =)
Jeśli nie, aby ustawić ją jako domyślną (zwykle już tak jest) Debian
i pochodną taką jak Ubuntu
:
$ sudo update-alternatives --set rename /path/to/rename
(zamień /path/to/rename
na ścieżkę twojego perl's rename
polecenia.
Last but not least, to narzędzie zostało pierwotnie napisane przez Larry'ego Walla, ojca Perla.
Oprócz polecenia zmiany nazwy możesz to zrobić bezpośrednio w bash (tylko jeden sposób z wielu):
for file in *pdf.txt; do mv $file ${file//[A-Z.]}.txt ; done
Edytowane, aby pokazać Pinyaka, jak to działa:
hmontoliu@ulises2:/tmp/foo$ touch PCM21375.pdf.txt PCM21376.pdf.txt
hmontoliu@ulises2:/tmp/foo$ ls
PCM21375.pdf.txt PCM21376.pdf.txt
hmontoliu@ulises2:/tmp/foo$ for file in *pdf.txt; do mv $file ${file//[A-Z.]}.txt ; done
hmontoliu@ulises2:/tmp/foo$ ls
21375.txt 21376.txt
.pdf
z nazwy pliku.
Istnieje kilka narzędzi do zmiany nazw plików, ale jednym z najłatwiejszych w użyciu jest rename
. W twoim przypadku prawdopodobnie możesz zrobić:
rename PMC '' *txt
rename .pdf '' *txt
Pierwszy parametr to część nazwy pliku do zastąpienia. Drugi parametr to ciąg zastępujący. Tutaj używam ''
do reprezentowania pustego ciągu. Wszystkie poniższe parametry to pliki do zmiany nazwy, tutaj *txt
ograniczyłem zastępowanie do plików tekstowych.
rename
powinien już być obecny, jeśli używasz Linuksa. Jeśli używasz * BSD lub OS X, być może będziesz musiał go najpierw zainstalować.
rename
. Jest jeden z util-linux
i jeden perl
z inną składnią. Ten, do którego się odnosisz, wygląda tak, jak ten z util-linux
tego, który jest czasami wywoływany, rename.ul
aby nie mylić go rename
z perl
, podczas gdy w niektórych innych systemach, rename
to ten z util-linux i ten z perl
jest nazywany prename
.
rename 's/PMC// *.txt
rename s/\.pdf// *.txt
Najpierw wykonaj kopię zapasową plików! Zasadniczo możesz użyć jedno-liniowego python w bieżącym katalogu w ogólnej formie:
python -c "import glob,os; [os.rename(fn, fn.replace('PATTERN', 'REPLACE')) for fn in glob.glob('PATH/*')]"
w twoim konkretnym przypadku możesz użyć tego dwukrotnie:
python -c "import glob,os; [os.rename(fn, fn.replace('.pdf', '')) for fn in glob.glob('*')]"
usunąć .pdf
i ponownie:
python -c "import glob,os; [os.rename(fn, fn.replace('PMC', '')) for fn in glob.glob('*')]"
do usunięcia PMC
.
Spróbuj tego:
for i in *.pdf.txt; do j=${i//\.pdf/}; j=${j//PMC/}; mv $i $j; done
Te j=${i//\.pdf/}
środki, aby zastąpić .pdf
w $i
nic. Podobnie z drugim zadaniem j pozbywającym się PMC.
Jeśli używasz zsh
, jest to typowa praca dla zmv
:
zmv 'PMC(*).pdf.txt' '$1.txt'
(z zmv
wdziękiem radzi sobie z potencjalnymi konfliktami).
.pdf
nazwy pliku.