Większość użytkowników systemu Linux zna polecenie find, i wie jak przydatne jest to narzędzie w codziennej pracy. Dzisiaj postaramy się spojrzeć na ciekawą alternatywę dla w/w narzędzia, jakim jest polecenie o nazwie fd.

Polecenie fd, ma być z założenia prostym, szybkim i przyjaznym dla użytkownika narzędziem umożliwiającym wyszukiwanie plików/katalogów w systemie plików systemu GNU/Linux, którego największą zaletą ma być dużo szybsze działanie w porównaniu z poleceniem find.

Polecenie fd nie ma bynajmniej na celu całkowitego zastąpienia polecenia find (gdyż to narzędzie jednak nadal daje nam dużo większy zakres możliwości), a raczej ma być dla nas łatwiejszą oraz szybszą w codziennym użyciu alternatywą.

 

Kilka zalet narzędzia fd, dla których warto zastanowić się nad jego wykorzystywaniem:

  • Szybkość/wydajność użycia. Benchmarki dewelopera można znaleźć tutaj.
  • Łatwa w użyciu składnia – fd *wzorzec* zamiast find -iname *wzorzec*
  • Kolorowanie danych wyjściowych, podobnie trochę jak dla polecenia ls
  • Inteligentne wyszukiwanie, w którym domyślnie nie są rozróżniane wielkości liter, ale gdy użyjemy dużej litery w podanym wzorcu, to narzędzie automatycznie przełączy się na uwzględnianie wielkości liter
  • Domyślnie nie szuka ukrytych plików i katalogów .
  • Domyślnie nie zagląda do .gitignore

 

Pierwszą natomiast wadą tego narzędzia jest to, że domyślnie w naszej dystrybucji systemu GNU/Linux tego narzędzia nie znajdziemy, co oznacza, że najpierw konieczne jest jego zainstalowanie 🙁

 

 

 

To jak zainstalować fd w moim Linuksie?

W przypadku dystrybucji opartych na Debianie należy pobrać najnowszą wersję fd ze strony projektu, i zainstalować ją za pomocą następujących poleceń:

# wget https://github.com/sharkdp/fd/releases/download/v7.3.0/fd-musl_7.3.0_amd64.deb
# dpkg -i fd-musl_7.3.0_amd64.deb

W innych dystrybucjach systemu Linux można zainstalować fd z domyślnego repozytorium przy użyciu menedżera pakietów, używając poleceń jak poniżej:

# dnf install fd-find  [dla Fedora]
# pacman -S fd         [dla Arch Linux]
# emerge -av fd        [dla Gentoo]
# zypper in fd         [dla OpenSuse]

 

 

A jak używać tego narzędzia fd?

Dostępne opcje można sprawdzić używając poleceń:

# fd -h  
lub  
# fd --help

 

przykładowo:

 

 

To teraz spróbujmy spojrzeć na kilka przykładów użycia narzędzia fd.

Na początek można wydać samo polecenie fd (w ramach przykładów wykorzystywać będziemy katalog /www/strona/wordpress gdzie zostały rozpakowane pliki instalacyjne aplikacji web’owej WordPress), gdzie już można zauważyć, iż katalogi są kolorowane na niebiesko (a to też czego niestety w tym artykule nie można zauważyć to prędkość z jaką uzyskujemy wynik wyszukania… – co jest największą zaletą tegoż narzędzia):

 

 

Załóżmy teraz, że chcemy znaleźć wszystkie pliki z rozszerzeniem jpg. Możemy w tej sytuacji użyć przełącznika -e do filtrowania według zadanego rozszerzenia pliku:

Warto zwrócić uwagę dla powyższego przykładu, że wydając polecenie fd, przebywamy w katalogu /www/strona/worpdress, i wyszukiwanie jest realizowane wewnątrz tego katalogu tylko, i ponadto można zauważyć także, że katalogi są koloryzowane na niebiesko, a pliki z formatem rozszerzenia plików obrazów – na fioletowo.

 

Dobra, to teraz wróćmy do w sumie może najczęściej chyba realizowanego wyszukiwania, czyli wyszukiwania plików/katalogów, które posiadają określony ciąg znaków („no pamiętam, że coś tam miało w nazwie takie coś…”). Wtedy, będąc w katalogu, w którym chcemy zrealizować wyszukiwanie, wystarczy podać po poleceniu fd, jako argument, pożądany przez nas wzorzec. Przykładowo załóżmy, że w naszym rozpatrywanym wcześniej katalogu, chcemy znaleźć pliki, które mają w nazwie wyrażenie „readme”, to w takiej sytuacji podajemy polecenie jak poniżej:

i możemy zauważyć w wyniku wyszukiwania, jak już wcześniej było wskazane, że polecenie fd nie było wrażliwe na wielkość liter, czyli wyszukało nam zarówno pliki z nazwami pisanymi dużymi literami, jak również te pisane małymi literami. Ale… jak podamy po poleceniu fd, jako argument wyrażenie „README” pisane dużymi literami:

to można już zauważyć, że polecenie wyszukało pliki, zakładając już „wrażliwość” na wielkość znaków.

 

 

Parametr -e może być oczywiście stosowany w połączeniu z wzorcem, np. polecenie:

jak można zauważyć, wyszuka pliki z rozszerzeniem php zawierające w sobie ciąg „index”.

 

Jeśli chcielibyśmy wykluczyć w wynikach wyszukiwania niektóre elementy niezgodne z podanym wzorcem, możemy użyć parametru -E w sposób jak w poniższym przykładzie:

w którym to poleceniu uzyskamy taki założony efekt, iż zostaną wyszukane wszystkie pliki z rozszerzeniem php, zawierające ciąg „index”, z wykluczeniem tych wyników wyszukania, które znajdują się w katalogu „wp-content”.

 

 

A co jeśli chciałbym, aby wyszukać wskazane pliki właśnie tylko w określonym katalogu?

To przykładowo możemy wydać polecenie:

które wyszuka nam pliki jpg znajdujące się wewnątrz podkatalogu „wp-content” (co ciekawe, przy zastosowaniu katalogu jako argumentu, nie można korzystać już z przełącznika-e, który wyszukuje pliki ze wskazanym rozszerzeniem, co oznacza, że wyszukiwać możemy wykorzystując wzorzec – może w którejś kolejne wersji będzie to już działać wspólnie).

 

 

A co jeśli chciałbym wyszukać pliki nie w katalogu, w którym aktualnie jestem, ani w podkatalogu, tylko wskazanym konkretnym?

Wtedy możemy użyć przełącznika -p. Przykładowo:

zadane powyższe polecenie wyszuka nam wszystkie pliki zawierające ciąg znaków „readme” w katalogu /etc.

 

 

 

Co istotne dla nas, podobnie jak w poleceniu find, można użyć parametru -x albo --exec do wykonywania zadanej akacji na wynikach wyszukiwania. Aby lepiej zrozumieć, przeanalizujmy poniższy przykład:

Jak można zauważyć polecenie fd -e jpg -x chmod 644 {} spowodowało wyszukanie plików z rozszerzeniem jpg, a następnie dla każdego z tych plików zmianę uprawnień na rw-r–r–. Także po parametrze -x podajemy polecenie, które ma wykonać zadaną akcję na każdym wyniku wyszukiwania, a w ramach tegoż polecenia w miejscu gdzie normalnie jako argument powinniśmy wskazać ścieżkę do pliku/katalogu wpisujemy dwa nawiasy klamrowe – {}.

 

Jako ciekawostka, oto kilka przydatnych sposobów użycia nawiasów klamrowych dla parametru -x:

  • {}– symbol zastępczy, który zostanie zamieniony na ścieżkę wyniku wyszukiwania (np.: wp-content/uploads/file.jpg).
  • {.}– efekt wykorzystania jest podobny jak dla {}, ale symbol zastępczy zostanie tu zamieniony na ścieżkę wyniku wyszukiwania, bez samego już rozszerzenia pliku (np.: wp-content/uploads/file).
  • {/}– symbol zastępczy, który zostanie zastąpiony samą podstawową nazwą wyniku wyszukiwania, bez całej pełnej ścieżki (np.: file.jpg).
  • {//}– symbol zastępczy, który zwróci sam katalog ze ścieżki wyniku wyszukiwania (np.: wp-content/uploads).
  • {/.}– symbol zastępczy, który zwróci samą nazwę wyniku wyszukiwania, bez ścieżki katalogu, oraz bez rozszerzenia (np.: file).

 

 

Warto również zwrócić uwagę na poniższe przełączniki:

  • -t lub --type – umożliwia filtrowanie według typu: plik (f), katalog (d), dowiązanie symboliczne (l), plik wykonywalny (x), pusty (e)
  • -s lub --size – umożliwia filtrowanie ograniczając wyniki na podstawie rozmiaru plików
  • --changed-within <date|dur> – umożliwia filtrowanie według czasu ostatniej modyfikacji pliku (nowszy niż)
  • --changed--before <date|dur> – umożliwia filtrowanie według czasu ostatniej modyfikacji pliku (starszy niż)

 

 

Małe podsumowanie

Powyższy artykuł był oczywiście krótkim przeglądem możliwości polecenia fd, który jak widać było jest swoistą alternatywą dla znanego polecenia find. Największym jego minusem jest napewno to, że domyślnie nie jest zainstalowany w żadnej dystrybucji, i wymaga doinstalowania (w przeciwieństwie do polecenia find). Natomiast jak już go zainstalujemy, to w porównaniu do polecenia find, może być łatwiejszy dla nas w użyciu, i co jeszcze istotniejsze SZYBSZY. Aczkolwiek, drugim problemem polecenia fd w porównaniu z find jest fakt, że find  jednak zapewnia nam znacznie większe możliwości przełączników związanych z kryteriami filtrowania.

Także jak już wspomniano wcześniej w tym artykule, fd nie ma na celu całkowitego zastąpienia find, ale ma być bardziej jego uzupełnieniem, dając nam w codziennej pracy z systemem GNU/Linux możliwość realizacji łatwiejszego wyszukiwania, z lepszą wydajnością.

 

 

Udostępnij, jeśli ci się spodobało: