#Linux – Wyszukiwanie plików
Do wyszukiwania plików w systemie Linux używa się polecenia find
. Jego możliwości są bardzo szerokie, bowiem umożliwia wyszukiwanie w dowolnej lokalizacji rekursywnie a jako parametr może przyjąć nazwę pliku, rozszerzenie, wyrażenie regularne czy datę modyfikacji, Umożliwia także masowe usuwanie lub zmianę uprawnień wszystkich plików spełniających kryteria wyszukiwania.
Ogólna składnia polecenia find
Czyli jak ogólnie używać polecenia. Składania wygląda następująco:
find <options> <path> <expression>
Omówienie:
- Atrybut „options” określa dodatkowe parametry wyszukiwania, umożliwiając jego optymalizację i precyzowanie,
- Atrybut „path” określa, z jakiego folderu zaczynać wyszukiwanie (bierze pod uwagę również foldery znajdujące się wewnątrz wskazanej lokalizacji),
- Atrybut „expression” określa wyrażenie określające nazwę pliku – może to być nazwa lub opis nazwy
Przykłady użycia polecenia find
Wyszukaj po nazwie
Najprostsze wyszukiwanie po nazwie – należy użyć parametru name
. Nie wskazujemy lokalizacji, więc wyszukiwanie rozpocznie się od folderu, w którym aktualnie się znajdujesz i rekursywnie przeszuka także foldery wewnątrz.
find -name plik.txt # plik o nazwie plik.txt od bieżącego katalogu
Aby wyszukać bez względu na wielkość liter, zastosuj parametr iname
.
find -iname plik.txt # plik o nazwie plik.txt bez względu na wielkość liter od bieżącego katalogu
Wyszukaj w konkretnej lokalizacji
Możesz także doprecyzować wyszukiwanie, określając lokalizację startową. Wpisz „.” (kropkę), wtedy wyszukiwanie rozpocznie się od folderu wyżej. Wpisz „/” (slash), wtedy wyszukiwanie odbędzie się w całym systemie plików. Wpisz dokładną lokalizację, żeby to w niej wyszukać.
find . -name plik.txt # plik o nazwie plik.txt od katalogu wyżej
find / -name plik.txt # plik o nazwie plik.txt w całym systemie plików
find /var plik.txt # plik o nazwie plik.txt w katalogu /var
Wyszukiwanie jest zawsze rekurencyjne, ale możesz określić, na ile poziomów głębokości ma się ono odbyć, tj. ile katalogów wewnątrz ma zostać przeszukane. W tym celu użyj parametru maxdepth
.
find /var plik.txt -maxdepth 2 # plik o nazwie plik.txt w katalogu /var ale maksymalnie 2 poziomy wgłąb
Wyszukaj po rozszerzeniu
Nie musisz podawać konkretnej nazwy. Wpisanie „*” (gwiazdki) zastępuje dowolny ciąg znaków.
find -name *.jpg # wyszuka każdy plik o rozszerzeniu jpg od bieżącego katalogu
Wyszukaj puste pliki
Wykorzystaj dwa dodatkowe parametry, parametr type
określający, co chcesz wyszukać (wartość „f” dla plików) oraz parametr empty
.
find . -type f -empty
# wyszuka puste pliki od katalogu wyżej
Wyszukaj katalogi
Możesz także wyszukać katalogi. W tym celu wykorzystaj parametr type
z wartością „d”.
find . -name log -type d # wyszuka katalogi o nazwie log od katalogu wyżej
Wyszukaj po dacie modyfikacji
Wykorzystaj parametr mtime
, aby określić, ile maksymalnie dni temu plik musiał zostać zmodyfikowany.
find . -type f -mtime -3 # wyszuka pliki modyfikowane w ciągu 3 ostatnich dni od katalogu wyżej
Wyszukaj niespełniające zapytania
Możesz wyszukiwać pliki, określając jakiego wyrażenia mają one nie spełniać. W tym celu wykorzystaj parametr not
.
find . -type f -not -name *.html # wyszuka pliki o rozszerzeniu innym niż html od katalogu wyżej
Wykonaj operację na znalezionych plikach
Możesz od razu zastosować operacje na znalezionych plikach. Możesz nadać im odpowiednie uprawnienia czy zmienić ich ostatni czas użycia. W tym celu użyj parametru exec
, który wykona zadaną akcję dla każdego wyniku wyszukiwania.
find . -name "plik.txt" -exec chmod o+r '{}' \;
# nadaje uprawniania dla plików plik.txt od katalogu wyżej
find . -name "plik.txt" -exec touch '{}' \; # ustawia ostatni czas użycia na teraz dla plików plik.txt od katalogu wyżej
Usuń znalezione plikis
Aby usunąć pliki, możesz użyć parametru exec
z poleceniem rm
, ale wygodniej będzie skorzystać z parametru delete
.
find . -name "*.txt" -delete
# usuwa pliki o rozszerzeniu txt od katalogu wyżej
Wyszukiwanie jest zbyt wolne?
Wypróbuj polecenie fd
. Jest to alternatywa dla standardowego polecenia find
napisana w Rust. Zaletą jest oczywiście, duża szybkość, wadą – ograniczona funkcjonalność skupiona wokół najpotrzebniejszych przypadków użycia. Aby z niej skorzystać, zainstaluj odpowiedni pakiet.
sudo apt update
sudo apt install fd-find
Ogólna składnia polecenia fd
Użycie jest bardzo proste.
fd wyrażenie
Przykłady użycia polecenia fd
Wyszukiwanie po nazwie
Wpisz część nazwy lub pełną nazwę. Możesz uzyć „*” (gwiazdki) aby zastąpić część nazwy.
find log # wyszuka pliki zawierające log
Wyszukiwanie wyrażeniem regularnym
Zapytanie domyślnie jest traktowane jako wyrażenie regularne. Należy je umieścić w cudzysłowie/apostrofie, rozpocząć ^
(dash) a zakończyć $
(dolarem). Wewnątrz można stosować dowolne wyrażenia regularne. Poniższy przykład wyszuka wszystkie pliki zaczynające się słowem log i kończące się słowem txt.
fd '^log.*txt$' # wyszuka pliki zaczynające się słowem log i kończące się słowem txt
Wyszukiwanie w konkretnej lokalizacji
Po nazwie wyszukiwanego pliku określ lokalizację.
find log /var # wyszuka pliki zawierające log w nazwie w katalogu /var
Więcej sposobów wyszukiwania
Więcej przypadków użycia znajdziesz na Githubie autorów.