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
Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Poprzedni post

OpenStreetMap – Część 3 Warstwy

Następny post

moreutils cz. 2 – sponge i vipe

Powiązane posty

Hand of Thief – trojan na Linuksa

Na rynku cyberprzestępców krążyć zaczął trojan Hand of Thief, który za cel obiera sobie klientów banków korzystających z platformy Linux. Nowe zagrożenie opisali specjaliści od zabezpieczeń z firmy RSA.

Trojan o nazwie Hand of Thief potrafi podsłuchiwać sesje HTTP i HTTPS na większości przeglądarek (m.in. Firefox i Chrome), posiada wbudowanego backdoora, blokuje wybrane adresy aby utrudnić pozbycie się go oraz zabezpieczenie przed zdebugowaniem przez specjalistów od zabezpieczeń. Nie różni się tym samym od setek podobnych złośliwych programów, których zadaniem jest zdobycie dostępu do kont bankowości elektronicznej. To co go wyróżnia na ich tle, to platforma, na której działa — jest nią Linux.

Więcej...