Mam ten katalog i chcę zmienić nazwę plików:
===> ls -1 Der-vierte-Weise/
10 - 10 - Erkenntniss.ogg
1 - 01 - Hoffnung.ogg
11 - 11 - Wahrheit.ogg
12 - 12 - Dankbarkeit.ogg
13 - 13 - Kredits.ogg
2 - 02 - Familie.ogg
3 - 03 - Demut.ogg
4 - 04 - Freude.ogg
5 - 05 - Schoenheit.ogg
6 - 06 - Solidaritaet.ogg
7 - 07 - Entscheidung.ogg
8 - 08 - Hilfe.ogg
9 - 09 - Unterstuetzung.ogg
Wynik powinien wyglądać następująco:
===> ls -1 Der-vierte-Weise/
01 - Hoffnung.ogg
02 - Familie.ogg
...
Chciałbym rozwiązać ten problem za pomocą popularnych narzędzi powłoki.
command-line
bash
batch-rename
guettli
źródło
źródło
Odpowiedzi:
Możesz użyć
rename
...Usuń
-n
po przetestowaniu, aby faktycznie zmienić nazwę plikówWyjaśnienie
s/old/new/
wymienićold
znew
^
początek łańcucha[0-9]+
niektóre liczbyźródło
rename
narzędzie. Czy używa PCRE? ... byłoby wspaniale.rename
to skrypt Perla, więc ma pełną obsługę wyrażeń regularnych Perla; PCRE jest tylko jego podzbiorem. Jednak wszystko, co znasz z PCRE, będzie miało zastosowanierename
.rename
ma wyrażenia regularne zgodne z Perlem. Tak, implementacja pcre nie jest używana. Zrozumiałem to :-) Dziękuję za szybką odpowiedź.bash
rozszerzenie parametru, aby usunąć wymaganą część od początku:Rozszerzona forma:
echo
jest przeznaczony do pracy na sucho; pozbądź się go do faktycznego działania:Przykład:
źródło
rename
polecenie. (Wymagane mniej pisania).rename
to droga, jeśli znasz PCRE;rename
odpowiedź została już podana więc trzeba przenieść z czystymbash
. Wystarczy zauważyć,python
„sre
(lubregex
) moduł nie jest w pełni kompatybilny PCRE BTW.${f#[[:digit:]]*-[[:blank:]]}
brzydkie. Tak to działa. Ale żyjemy w 21 wieku. Myślę, że czas przejść z „działa” na „to łatwe i przyjemne”. Jeśli celem jest „to działa”, to linux nigdy nie straci uprzedzeń, że nie jest przyjazny. Ponieważ masz już dużo głosów oddanych, ten jeden głos oddany nie powinien zaszkodzić (mam nadzieję). Jeśli tak, powiedz mi, a ja to cofnę.[[:digit:]]
i[[:blank:]]
tam, aby spełnić twoje wymaganialocale
, są również dość powszechne w Regex.