moreutils cz. 1 – vidir

Moreutils to pakiet 15 dodatkowych narzędzi do basha. Wszystkie są ciekawe, a część z nich potrafi być bardzo użyteczna. W tym odcinku zajmiemy się poleceniem vidir.

Instalacja

Pakiet moreutils nie jest domyślnie zainstalowany w systemie i trzeba go sobie doinstalować – w zależności od dystrubucji:

$ sudo pacman -S moreutils
$ sudo dnf install moreutils
$ sudo yum install moreutils
$ sudo apt-get install moreutils

Czym jest vidir

Polecenie vidir, będące jednym z elementów pakietu moreutils jest ciekawą koncepcją manipulacji plikami, a w zasadzie ich nazwami, za pomocą… edytora tekstu. Jest to alternatywa dla takich narzędzi jak polecenie rename czy narzędzie zmiany nazw Thunara (możliwe do wywołania za pomocą thunar -B). Przyznam, że w pierwszej chwili budzi to wątpliwości, ale przy bliższym poznaniu – zwłaszcza w przypadku jakichś bardziej skomplikowanych zmian – naprawdę bardzo zyskuje.

Informacje o programie

vidir nie obsługuje zwyczajowego parametru -h lub –help. Aby dowiedzieć się czegoś o nim, trzeba użyć polecenia man vidir. Nie ma tam zbyt wiele, ponieważ interfejs programu jest niezwykle prosty. 

Jedynym dostępnym parametrem jest -v (verbose) – który po zakończeniu operacji wyświetla w konsoli jakie działania zostały przeprowadzone. Zdecydowanie warto ten parametr zawsze dodać do polecenia – jeśli coś pójdzie nie tak, przynajmniej będzie wiadomo co.

Warto nawet dodać alias w pliku ~/.bashrc lub – jeszcze lepiej – ~/.profile:

alias vidir='vidir -v'

W ten sposób nie trzeba będzie pamiętać za każdym razem o dodaniu parametru.

Wybór edytora

Podobnie jak znane skądinąd polecenie visudo (nie znacie? to warto poszukać) vidir korzysta z domyślnego edytora zdefiniowanego w bashu. Kiedyś był to edytor vi (stąd nazwa całej serii poleceń opartych na edytorze), obecnie np. w Ubuntu jest to nano.

Można jednak wybrać niemal dowolny edytor, w tym graficzne np. geany lub gedit. Trzeba jedynie zmodyfikować zmienną systemową EDITOR lub – mniej znaną – VISUAL (jest to opisane w manpages). Aby użyć innego edytora w danej sesji wystarczy wpisać w konsoli:

export EDITOR=gedit

Aby przypisanie zmienić na stałe trzeba taką linię dodać w ~/.bashrc lub ~/.profile.

Dlaczego warto zmienić edytor na swój ulubiony? Bo w nim najsprawniej zamienimy fragmenty tekstu (nazw plików) na inne, używając znanych sobie funkcji programu. W przykładach będę się posługiwał edytorem gedit, który jest domyślnie dostępny w części dystrybucji, a na pewno można go łatwo zainstalować z repozytoriów. Napisałem, że można wykorzystać niemal każdy edytor – otóż bardzo lubiany przez wielu użytkowników VSCode nie ma ochoty współpracować z vidir. Na pocieszenie dodam, że zarówno domyślny dla części dystrybucji gedit, jak i doskonały geany nie mają tych wątpliwości, a pozwalają na różnorakie modyfikacje tekstu, w tym wyrażenia regularne.

vidir w działaniu

Na potrzeby testów został stworzony testowy katalog za pomocą polecenia:

mkdir aaa && touch aaa/plik{1..5}.txt && mkdir aaa/bbb && touch aaa/bbb/file{1..5}.txt

Polecenie to tworzy testowy katalog aaa, w nim katalog bbb, a w nich po 5 plików, na których można bezpiecznie przeprowadzać eksperymenty. Warto sobie takie środowisko stworzyć i potestować możliwości programu nie ryzykując zniszczenia prawdziwych plików.

A więc do dzieła:

$ cd aaa
$ export EDITOR=gedit
$ vidir -v

I oto w edytorze otrzymujemy listę plików wraz z ich nazwami. Widoczny jest również podkatalog. vidir potrafi działać rekursywnie, ale o tym za chwilę.

Warto zwrócić uwagę na numer na początku każdej linii. Jest on identyfikatorem pliku i o ile z nazwami można robić co się komu żywnie podoba, o tyle z numerami należy być ostrożnym. Usunięcie numeru oznacza usunięcie pliku z dysku. Zamiana numerów dwóch lub więcej plików oznacza wzajemne pozamienianie nazw. Czasem jest to wygodne, ale zdecydowanie należy z takimi operacjami uważać. Poza tym ten zestaw nazw plików można edytować tak jak każdy inny plik tekstowy, zmieniając, usuwając czy dodając ciągi znaków do nazw plików.

W ramach testu zostały zmienione nazwy trzech plików z „plik” na „dokument”, a ostatni z plików został usunięty. Dopóki edytor nie zostanie zamknięty zmiany nie zostaną wprowadzone w życie – można je przejrzeć, poprawić, cofnąć. Jest to niezwykle wygodna – i bezpieczna – metoda pracy z plikami. Na zakończenie pracy trzeba zapisać zmiany (zazwyczaj Ctrl+S) i zamknąć edytor.

Po jego zamknięciu pliki zostaną zmienione zgodnie z tym, co zostało poprawione w edytorze, a w konsoli (efekt argumentu -v) pojawi się zestawienie zmian.

vidir i find

vidir nie musi ograniczyć się do jednego katalogu, niekoniecznie też musi działać na wszystkich plikach. Do polecenia można przekierować wynik działania polecenia find – z całym bogactwem możliwości. 

find . | vidir -v -

Trzeba jedynie pamiętać o tym, że polecenie vidir nie czyta domyślnie standardowego wejścia (stdin) i jako parametr należy w tym przypadku podać minus (-), co oznacza właśnie odczytanie danych wysłanych przez poprzedni program.

Takie połączenie daje niemal nieograniczone możliwości:

find . -type f | vidir -v -

Edytuj nazwy tylko plików (pomiń katalogi)

find . -name “*.jpg” | vidir -v -

Edytuj tylko nazwy plików o rozszerzeniu “jpg” (np. w katalogu ze zdjęciami)

find . -user alojzy | vidir -v -

Edytuj tylko nazwy plików, których właścicielem jest Alojzy (w środowisku wieloużytkownikowym)

I tak dalej, i tak dalej…

Może warto wspomnieć o tym, że vidir może usuwać tylko puste katalogi. Jeśli za pomocą edytora tekstowego chcemy usunąć podkatalog, to należy również usunąć wszystkie zawarte w nim pliki.

Podsumowanie

vidir to narzędzie bardzo poręczne, pozwalające na szybką, sprawną edycję nazw plików, na bezproblemowe użycie wyrażeń regularnych do zmiany nazw plików, a nade wszystko bezpieczne, bo zmiany można przed ich zastosowaniem przejrzeć i ewentualnie wycofać. Jeśli trzeba pliki przenumerować albo nadać im nazwy zgodne z EXIFem – zapewne potrzebne będą inne narzędzia. Ale jeśli trzeba szybko zmienić nazwy nawet na kilku poziomach podkatalogów – vidir sprawdza się rewelacyjnie. 

Anegdotycznym przypadkiem była konieczność zmiany zbyt długich nazw, z którymi nie radził sobie Windows 10, nie dało się ich nawet skrócić. Uruchomienie vidir w konsoli bash WSL pozwoliło załatwić sprawę w mniej niż minutę.

Moreutils to ciekawy pakiet, zawierający kilka bardzo użytecznych narzędzi. Zostańcie z nami, wkrótce opisy kolejnych elementów pakietu.

2 komentarze

Komentarze są wyłączone.

Poprzedni post

OpenStreetMap – Część 3 Warstwy

Następny post

moreutils cz. 2 – sponge i vipe

Powiązane posty

SUSE Linux Enterprise Server for SAP Applications już dostępny w Amazon Web Services

Warszawa, 7 października 2015 r. - Firma SUSE udostępniła system SUSE Linux Enterprise Server for SAP Applications, wiodącą platformę linuksową dla rozwiązań SAP, w chmurze Amazon Web Services (AWS). Co więcej, dzięki uruchomionemu przez SUSE programowi "Bring Your Own Subscription", obecni użytkownicy systemu SUSE Linux Enterprise Server for SAP Applications mogą teraz uruchamiać i testować aplikacje SAP w środowisku AWS. Otwiera to przed nimi nowe korzyści, jakie zapewnia elastyczna infrastruktura AWS, dostosowująca się do zmieniających się potrzeb klienta.

Więcej...