Zauważ, że używasz skryptu Perla zwanegorename dystrybuowanym przez Debian i jego pochodne (Ubuntu, Mint,…). Inne dystrybucje Linuksa zawierają zupełnie inną i znacznie mniej użyteczną komendę o nazwie rename.
y/A-Z/a-z/tłumaczy każdy znak w zakresie Apoprzez Zdo odpowiedniego znaku w zakresie apoprzez z, czyli ASCII wielkich liter do odpowiedniej litery małe. Aby wykonać odwrotne tłumaczenie, użyj y/a-z/A-Z/. Innym sposobem, aby napisać to samo polecenie rename '$_ = uc($_)' *- ucjest u pper c funkcja ASE, a renamekomenda zmienia nazwy plików na podstawie przekształceń dokonanych w $_zmiennej.
rename '…' *zmienia tylko nazwy plików w bieżącym katalogu, ponieważ to właśnie *pasuje. Pliki kropkowe (pliki, których nazwa zaczyna się na .) są również pomijane.
Jeśli chcesz zmieniać nazwy plików w bieżącym katalogu i podkatalogach rekurencyjnie, możesz użyć findpolecenia, aby rekurencyjnie przechodzić do bieżącego katalogu. Jest tu trudność: jeśli zadzwonisz rename, to zmieni nazwę zarówno katalogu, jak i nazwy podstawowej. Jeśli wywołujesz renamekatalog przed rekursowaniem w nim ( find -exec rename … {} \;), findstaje się zdezorientowany, ponieważ znalazł katalog, ale katalog ten już nie istnieje, dopóki nie spróbuje w niego zejść. Można to obejść mówiąc findprzemierzać katalogu przed działających na nim, ale potem kończy się próbą zmiany nazwy foo/barna FOO/BARale katalog FOOnie istnieje.
Prostym sposobem na uniknięcie tej trudności jest spowodowanie, aby polecenie zmiany nazwy działało tylko na nazwę podstawową na ścieżce. Wyrażenie regularne ([^/]*\Z)pasuje do końcowej części ścieżki, która nie zawiera /.
find . -depth -exec rename 's!([^/]*\Z)!uc($1)!e' {} +
Powłoka Zsh zapewnia wygodniejsze funkcje zmiany nazwy - nawet bardziej tajemnicze niż Perl, ale bardziej rozbudowane i często łatwiejsze do skomponowania.
Funkcja zmvzmienia nazwy plików na podstawie wzorców. Uruchom autoload -U zmvraz, aby go aktywować (wstaw tę linię do swojego .zshrc).
W pierwszym argumencie do zmv(wzorzec do zastąpienia) możesz użyć potężnych wzorców symboli wieloznacznych zsh . W drugim argumencie do zmv(tekst zastępczy) możesz użyć funkcji rozszerzania parametrów , w tym modyfikatorów historii .
zmv -w '**/*' '$1$2:u'
Wyjaśnienie:
-w - automatyczne przypisywanie zmiennych numerycznych do każdego wzoru wieloznacznego
**/*- wszystkie pliki w podkatalogach, rekurencyjnie ( **/dopasowuje 0, 1 lub więcej poziomów podkatalogów)
$1 - pierwsza zmienna numeryczna, tutaj pasująca do części katalogowej każdej ścieżki
$2:u- druga zmienna liczbowa, tutaj pasująca do podstawowej nazwy części każdej ścieżki, z :umodyfikatorem do konwersji wartości na wielkie litery
Dodatkową korzyścią jest przestrzeganie ustawień regionalnych otoczenia.
Jeśli nie masz pewności, co do zmvpolecenia, które napisałeś, możesz przekazać -nopcję wydrukowania tego, co zrobi polecenie, i niczego nie zmieniać. Sprawdź dane wyjściowe, a jeśli zrobi to, co chcesz, ponownie uruchom komendę bez -nfaktycznego działania.
rename 'y/a-z/A-Z/' *, dostaniesz to, czego chcesz. Ostrożnie tam, gdzie to przetestujesz.