Obecnie mam problemy z niektórymi folderami muzycznymi. Kiedyś postanowił nazwać je według wzoru: artist - album - year
. Uświadomiłem sobie dzisiaj, że to nie był sprytny ruch i chcę teraz nazwać moje katalogi według tego wzoru: year - artist - album
ponieważ będą one wyświetlane w porządku rosnącym, gdy zostaną wymienione.
Zacząłem zmieniać nazwę ręcznie, ale przy około 700 folderach musi istnieć prostszy sposób; Próbowałem używać, gprename
ale nie jestem zbyt dobry w skryptach regularnych i bashowych ...
Czy jest ktoś, kto mógłby mi pomóc oszczędzić moje słabe opuszki palców?
Kilka przykładów:
Aes Dana - Memory Shell - 2004
Anja Schneider & GummiHz - Back To Back (Remixes Part 2) - 2009
stanie się
2004 - Aes Dana - Memory Shell
2009 - Anja Schneider & GummiHz - Back To Back (Remixes Part 2)
EDYCJA: Niektóre nazwy wykonawców i albumów zawierają znaki specjalne, takie jak And.Id
lub Kool & The Gang
. Chociaż każdy katalog ma -
jako separator.
źródło
-
w nich nazwa albumu lub wykonawcy ?Odpowiedzi:
Zakładając, że masz dostęp do perla
rename
(ogólnie dostępny w Ubuntu - dzięki @Serg za wyjaśnienie różnicy. W razie wątpliwości zadzwoń,/usr/bin/rename
a powinieneś uzyskać właściwy), możesz użyć:Usuń
-n
po przetestowaniu, aby faktycznie zmienić nazwy katalogów. Zakłada się, że wszystkie albumy pochodzą z okresu od 1000 do 9999. Prawdopodobnie rozsądne ...Wyjaśnienie
s/old/new
wymienićold
znew
(.*)
zapisz dowolną liczbę dowolnych znaków, aby odwoływać się$1
później(\d{4})\/
zapisz cztery cyfry na końcu linii, aby odwołać się do nich$2
później.*/
dopasuj wszystkie katalogi (nie pliki - dzięki @muru za pomoc!)źródło
*/
warto dopasować tylko katalogi.mksh
mają wbudowane tzwrename
. Wystarczy zastąpić ją pełną ścieżką lub zadzwonić,prename
aby zadzwonić do zmiany nazwy Perlarename
jest „czasami nazywanyprename
”, ale najwyraźniej są to dwie „gałęzie” tego samego skryptu, jedna nieobsługiwana przez Debiana i ten drugi. Więc tak . . . jest mnóstwo bałaganu - niektóre powłoki mają własnerename
, pakiet perla ma własnerename
, a sam debian zapewnia osobny pakietrename.ul
w unix.stackexchange.com/q/229230/21167Prosty skrypt Pythona może wykonywać takie zadania:
Treść skryptu:
Jak to działa:
*/
aby dostarczyć tylko katalogi jako argumenty skryptu-
znaków. Nowa nazwa pliku jest zbudowana z wyodrębnionych części.move()
funkcja zshutils
modułu faktycznie zmienia nazwy katalogówZwróć uwagę na użycie:
./rename_dirs.py */
źródło