Czasem istnieje potrzeba masowej zmiany nazw plików i folderów. Np. chodzi o usunięcie znaku spacji (biały znak) lub polskich znaków diakrytycznych. Przeważnie takie prace są wymagane na potrzeby www. Z racji na trudności z kodowaniem i ścieżkami (np. do obrazka) takie litery i symbole w nazwach plików obrazków mogą być problematyczne.
Istnieje prosta metoda na masową zmianę nazw plików i folderów. Wraz z podfolderami. Sposób może nie jest doskonały (wymaga dublowania aż do uzyskania pełnego efektu), jednak na pewno dużo lepsze to niż ręczne zmienianie tych znaków. Dodatkowo – wystarczy do niego jedynie konsola.
Ogólna zasada:
Nazwy plików i folderów zmieniamy wg zasady:
1 |
find . -exec rename 's/ó/o/' '{}' \; |
Powyższa komenda zamieni wszystkie wystąpienia „ó” na „o”. Jednokrotne wywołanie tej komendy może nie być wystarczające. Należy tak długo ją ponawiać (poprzez wciśnięcie strzałki ↑) aby błędy typu:
1 |
find: `./Wizytówki': Nie ma takiego pliku ani katalogu |
Przestały się pojawiać. Należy też w osobnym oknie przeglądarki plików (lub na osobnym terminalu za pomocą np. Midnight Commander) śledzić czy wszystkie podfoldery zostały zmienione. Lub wywołać komendę znajdującą taki plik:
1 |
find . -iname "*ó"" |
(zastosowanie flagi -iname w odróżnieniu od -name znajduje pliki bez względu na ich wielkość)
Przykłady:
Szablon komendy z zamianą „ó” na „o” możemy jak pisaliśmy dowolnie zmieniać. Np.
Zamiana „ł” na „l”:
1 |
find . -exec rename 's/ł/l/' '{}' \; |
Zamiana białych znaków (spacja) na podkreślenie – tutaj użyjemy wyrażeń regularnych (Regex):
1 |
find . -exec rename 's/\s/_/' '{}' \; |
Zamiana „ń” na „n” – tylko plików z pominięciem folderów:
1 |
find . -type f -exec rename 's/ń/n/' '{}' \; |
Za każdym razem komendę należy ponawiać (poprzez wciśnięcie strzałki ↑) do uzyskania pełnego efektu. Ewentualne błędy – należy zignorować.
Szablon do zamiany wszystkich pl znaków diakrytycznych (uwaga! tylko dla małych liter):
1 2 3 4 5 6 7 8 9 |
find . -exec rename 's/ł/l/' '{}' \; find . -exec rename 's/ń/n/' '{}' \; find . -exec rename 's/ś/s/' '{}' \; find . -exec rename 's/ą/a/' '{}' \; find . -exec rename 's/ę/e/' '{}' \; find . -exec rename 's/ż/z/' '{}' \; find . -exec rename 's/ź/z/' '{}' \; find . -exec rename 's/ć/c/' '{}' \; find . -exec rename 's/ó/o/' '{}' \; |
grafika: alphacoders.com