Zmień nazwę plików w katalogu


10

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 PMCi drugie pdfz każdej nazwy pliku.

Odpowiedzi:


9

Z „s rename:

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 shellmonitu. Jest to bardzo przydatne, możesz wstawić trochę kodu tak jak ja, w podstawieniu.

Możesz usunąć -n(przełącznik trybu pracy na sucho), gdy testy staną się ważne.

ostrzeżenie 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) Debiani pochodną taką jak Ubuntu:

$ sudo update-alternatives --set rename /path/to/rename

(zamień /path/to/renamena ścieżkę twojego perl's renamepolecenia.


Last but not least, to narzędzie zostało pierwotnie napisane przez Larry'ego Walla, ojca Perla.


Nie spowoduje to usunięcia .pdfnazwy pliku.
— William Everett,

Post został odpowiednio zmodyfikowany.
— Gilles Quenot

5

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

To nie usunie .pdfz nazwy pliku.
— William Everett,

próbowałeś tego? ponieważ dla mnie tak jest. Pokazane w edycji.
— hmontoliu

Mój błąd. Myślałem, że po prostu zamieni wielkie litery. Pozytywne.
— William Everett,

4

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 *txtograniczyłem zastępowanie do plików tekstowych.

renamepowinien 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ć.


Nie sądzę, że jest GNU rename. Jest jeden z util-linuxi jeden perlz inną składnią. Ten, do którego się odnosisz, wygląda tak, jak ten z util-linuxtego, który jest czasami wywoływany, rename.ulaby nie mylić go renamez perl, podczas gdy w niektórych innych systemach, renameto ten z util-linux i ten z perljest nazywany prename.
— Stéphane Chazelas

1
Mój jest tym z util-linux. Pomyślałem, że to część jądra GNU.
— wingedsubmariner

Domyślna wersja zmiany nazwy Debiana byłaby rename 's/PMC// *.txtrename s/\.pdf// *.txt
— William Everett

1

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ąć .pdfi ponownie:

python -c "import glob,os; [os.rename(fn, fn.replace('PMC', '')) for fn in glob.glob('*')]"

do usunięcia PMC.


0

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ć .pdfw $inic. Podobnie z drugim zadaniem j pozbywającym się PMC.


0

Jeśli używasz zsh, jest to typowa praca dla zmv:

zmv 'PMC(*).pdf.txt' '$1.txt'

(z zmvwdziękiem radzi sobie z potencjalnymi konfliktami).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.