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.