Używam rename
cały czas. Jest to dość proste, ale mam nadzieję, że znasz podstawowe wyrażenia regularne:
rename "s/SEARCH/REPLACE/g" *
To zastąpi ciąg SEARCH
z REPLACE
każdym pliku (to znaczy *
). Te /g
środki globalne, więc jeśli miał SEARCH_SEARCH.jpg
, to by zostać zmieniona REPLACE_REPLACE.jpg
. Gdybyś tego nie /g
zrobił, zastąpiłby go tylko raz, a więc teraz nazwany REPLACE_SEARCH.jpg
. Jeśli chcesz, /i
aby wielkość liter nie była rozróżniana, dodaj (to byłoby /gi
lub /ig
na końcu).
Dzięki wyrażeniom regularnym możesz zrobić znacznie więcej.
Zauważ, że rename
jest to polecenie prename
(inaczej Perl rename
), które obsługuje pełne wyrażenia regularne Perla. Jest inny, rename
który wykorzystuje wzorce i nie jest tak potężny. prename
Kiedyś był instalowany domyślnie na Ubuntu (wraz z Perlem), ale teraz możesz zrobić:
sudo apt install rename
Oto kilka przykładów:
Prefiks
Dodaj :
rename 's/^/MyPrefix_/' *
document.pdf
przemianowany na MyPrefix_document.pdf
Usuń :
Możesz także usunąć niechciane ciągi. Załóżmy, że miałeś 20 plików MP3 o nazwach podobnych CD RIP 01 Song.mp3
i chciałeś usunąć część „CD RIP” i chciałeś usunąć ją ze wszystkich za pomocą jednego polecenia.
rename 's/^CD RIP //' *
CD RIP 01 Song.mp3
do 01 Song.mp3
Zwróć uwagę na dodatkowe miejsce w środku '^CD RIP '
, bez tego miejsca wszystkie pliki miałyby spację jako pierwszy znak pliku. Zauważ też, że zadziała to bez ^
znaku, ale pasowałoby CD RIP
do dowolnej części nazwy pliku. Te ^
gwarancje to tylko usuwa znaki, jeśli są one początek pliku.
Przyrostek
Dodaj :
rename 's/$/_MySuffix/' *
document.pdf
przemianowany na document.pdf_MySuffix
Zmień :
rename 's/\.pdf$/.doc/' *
zmieni się Something.pdf
w Something.doc
. (Powodem odwrotny ukośnik jest .
to wieloznaczny w regexp więc .pdf
meczów qPDF
natomiast \.pdf
tylko pasuje dokładnie ciąg .pdf
. Również bardzo ważne jest, aby pamiętać, że jeśli nie jesteś zaznajomiony z BASH, należy umieścić backslashy w apostrofach! Nie można pominąć cytaty lub użyj podwójnych cudzysłowów, albo bash spróbuje je przetłumaczyć. Bash \.
i "\."
równa się .
. (Ale używane są podwójne cudzysłowy i odwrotne ukośniki, na przykład „\ n” dla nowej linii, ale ponieważ "\."
nie jest prawidłową sekwencją odwrotną, tłumaczy się na .
)
W rzeczywistości możesz nawet zawrzeć części ciągu w cudzysłowie zamiast całości: 's/Search/Replace/g'
jest taki sam jak s/'Search'/'Replace'/g
i s/Search/Replace/g
BASH. Musisz tylko uważać na znaki specjalne (i spacje).
Sugeruję użycie tej -n
opcji, jeśli nie jesteś pewien, że masz poprawne wyrażenia regularne. Pokazuje, co zostanie przemianowane, a następnie wychodzi bez robienia tego. Na przykład:
rename -n s/'One'/'Two'/g *
Spowoduje to wyświetlenie wszystkich zmian, które wprowadziłby, gdyby nie umieścić -n
tam flagi. Jeśli wygląda dobrze, naciśnij, Upaby wrócić, a następnie skasuj -n
i naciśnij Enter(lub zamień na, -v
aby wyświetlić wszystkie wprowadzone zmiany).
Uwaga : rename
Domyślnie wersje Ubuntu powyżej 17.04 nie są dostarczane , jednak nadal są dostępne w repozytoriach. Użyj, sudo apt install rename
aby go zainstalować