MC, 16:37 niedziela, 09.09.2012 r.
Ilustracja do artykułu: Linux rename — Usuwanie spacji z nazw plików

Linux rename — Usuwanie spacji z nazw plików

Znaki spacji w nazwach plików, mogą stwarzać różne problemy, np. podczas dostępu przez przeglądarkę internetową do takich plików umieszczonych na serwerze, ale to tylko jedna z wielu podobnych sytuacji. Z tego powodu pokażę dziś bardzo prosty sposób na automatyczną zamianę znaków spacji z nazw plików, na inne znaki, bądź też zupełne ich usunięcie.

W czym problem?

Człowiek ze swej natury jest leniwy... Na ręczne zamienianie znaków spacji w nazwach plików, można sobie pozwolić, jeśli ma to dotyczyć jednego pliku, ale nie jeśli ma to być czynność powtarzalna - nie po to mamy komputer. Z tego powodu, poradzimy z tym zagadnieniem sobie przy pomocy polecenia rename, a następnie wykonamy sobie skrypt, który na przyszłość może ułatwić nam podobne zadania. No to do dzieła.

Jak usuwać/zamieniać znaki spacji z nazw plików?

Jak już wspomniałem, posłużymy się poleceniem rename, któremu podamy odpowiednie wyrażenie regularne, dzięki któremu program będzie wiedział, jak potraktować nazwy plików. Komenda rename obsługuje składnię wyrażeń regularnych znaną z Pearla. Nim przejdziemy do wydania właściwej komendy, zatrzymajmy się chwilkę przy tychże wyrażeniach. Jako, że będzie nas interesowała zamiana pewnych znaków na inne, wyrażenie regularne będzie miało składnie: s/<co zamienić>/<na co zamienić>/g, gdzie s/ oznacza substitution, czyli zamianę, zaś /g oznacza global, dzięki czemu zamiana będzie zachodziła w obrębie całej nazwy pliku, a nie np. tylko pierwszego wystąpienia szukanego ciągu znaków. Myślę, więc, że nikogo nie zdziwi już komenda, która będzie miała na celu zamianę wszystkich znaków spacji z nazwy polików, na podkreślniki _:
rename 's/ /_/g' <nazwa pliku>
Analogicznie, gdy spacje będziemy chcieli zamienić na kropki:
rename 's/ /./g' <nazwa pliku>
Jak również zupełne ich usunięcie:
rename 's/ //g' <nazwa pliku>

Może przygotujmy z tego skrypt?

Jeśli operacje zamiany spacji w nazwach plików wykonujemy dość często, dobrym pomysłem będzie przygotowanie sobie prostego skryptu w Bashu. Będzie to de facto zapisanie do pliku polecenia, wcześniej już wspomnianego. Stwórzmy więc plik, np. changespaces.sh, o poniższej zawartości (lub analogicznej do niej):
#!/bin/bash

rename 's/ /./g' "$1"
Jeśli zastanawia kogoś, co oznacza w tym pliku zapis "$1", odsyłam go do jednego z wcześniejszych artykułów - Linux & Bash - Przyjmowanie i obsługa argumentów zawierających spacje.
Kiedy plik skryptu mamy gotowy, nadajmy mu prawa do wykonywania:
chmod +x changespaces.sh
Skrypt właściwie jest już zdatny do użycia, polecam jednak stworzyć dowiązanie do katalogu /bin/, który znajduje się w ścieżkach środowiskowych, tak byśmy mogli w każdej lokacji, wygodnie korzystać z naszego skryptu:
sudo ln changespaces.sh /bin/changespaces
Teraz gdy wszystko jest już zrobione, czas na przykładowe wywołanie:
changespaces Jakis\ plik\ ze\ spacjami\ w\ nazwie.txt

Komentarze (0) - Nikt jeszcze nie komentował - bądź pierwszy!

Imię:
Treść: