find to polecenie służące do rekurencyjnego filtrowania obiektów w systemie plików na podstawie prostego mechanizmu warunkowego. Użyj find, aby wyszukać plik lub katalog w systemie plików. Używając flagi -exec, pliki mogą być znajdowane i natychmiast przetwarzane w ramach tego samego polecenia.

- Wyszukiwanie plików systemu Linux według nazwy lub rozszerzenia
- Wspólne polecenia znajdowania w systemie Linux i składnia
- Znajdowanie pliku w systemie Linux przy użyciu nazwy pliku
- Znajdowanie pliku w bieżącym katalogu za pomocą polecenia Znajdź
- Find Image Files in Linux Using the Command Line
- Znajdowanie pustego pliku w katalogu za pomocą wiersza poleceń
- Opcje i optymalizacje znajdowania plików w systemie Linux przy użyciu wiersza poleceń
- Wyszukiwanie plików w systemie Linux według czasu modyfikacji za pomocą wiersza poleceń
- Use Grep to Find Files in Linux Using the Command Line
- Przetwarzanie i znajdowanie plików za pomocą polecenia Znajdź w systemie Linux
- How to Find and Delete Files Using the Linux Command Line
Wyszukiwanie plików systemu Linux według nazwy lub rozszerzenia
Użyj polecenia find z wiersza poleceń, aby zlokalizować określony plik według nazwy lub rozszerzenia. Poniższy przykład wyszukuje pliki *.err w katalogu /home/username/ i wszystkich podkatalogach:
find /home/username/ -name "*.err"
Powinieneś zobaczyć podobne dane wyjściowe w swojej konsoli:
/home/username/example.errThe matching file in the /home/username/ directory is "example.err"
Wspólne polecenia znajdowania w systemie Linux i składnia
Polecenie find zwykle przyjmuje następującą postać:
find options starting/path expression
- Atrybut
optionskontroluje zachowanie i metodę optymalizacji procesufind. - Atrybut
starting/pathdefiniuje katalog najwyższego poziomu, w którymfindrozpoczyna filtrowanie. - Atrybut
expressionkontroluje testy, które przeszukują hierarchię katalogów w celu uzyskania danych wyjściowych.
Znajdowanie pliku w systemie Linux przy użyciu nazwy pliku
Aby znaleźć plik przy użyciu nazwy pliku, należy użyć składni find -name filename. Pominięcie ścieżki powoduje wyszukanie pliku na całym dysku. Na przykład można znaleźć plik o nazwie example.err znajdujący się w katalogu /home/username za pomocą następującego polecenia:
find -name example.err
Powinieneś zobaczyć podobny wynik:
./username/example.err
Znajdowanie pliku w bieżącym katalogu za pomocą polecenia Znajdź
Przyjrzyjrzyj się przykładowej strukturze katalogów i plików. Są one przywoływane w przykładach w tym przewodniku.
├── directory_1│ ├── subdirectory_1│ │ └── example.err│ └── example.err├── directory_2│ └── example.err├── directory_3│ └── example.err├── image01.png├── web_files│ ├── app.html│ ├── cb=gapi.loaded_0│ ├── edit.html│ ├── m=_b,_tp│ ├── rs=AA2YrTtgyE1yYXiu-GuLS6sbJdYr0u8VBQ│ ├── rs=AA2YrTvod91nzEJFOvvfJUrn6_vLwwY0bw│ ├── saved_resource.html│ ├── single.html│ └── unnamed.jpg├── web.html└── example.err
Jeśli znajdujesz się w katalogu directory_1 i chcesz znaleźć plik example.err w katalogu lub dowolnym z jego podkatalogów, możesz wydać następujące polecenie:
find . -name example.err
Twoje dane wyjściowe przypominają poniższe:
./example.err./directory_1/example.err
Wyniki odzwierciedlają strukturę katalogów directory_1:
├── directory_1│ ├── subdirectory_1│ │ └── example.err│ └── example.err
Find Image Files in Linux Using the Command Line
Odnosząc się do struktury plików w poprzedniej sekcji, istnieje obraz o nazwie image01.png, który znajduje się w korzeniu (/)struktury katalogów.
Aby znaleźć plik image01.png, wykonaj następujące polecenie find, które zlokalizuje wszystkie .png pliki przechowywane wewnątrz katalogu /.
find -name *.png
Powinieneś zobaczyć podobne dane wyjściowe:
./image01.png
Zmień typ pliku obrazu i poszukaj dowolnych plików .jpg w obrębie katalogu głównego (/):
find -name *.jpg
Wyniki przypominają przykład. Odwołaj się do przykładowej struktury katalogów w poprzedniej sekcji, aby zobaczyć lokalizację pliku.
./web_files/unnamed.jpg
Znajdowanie pustego pliku w katalogu za pomocą wiersza poleceń
Aby znaleźć pusty plik w katalogu za pomocą wiersza poleceń, wydaj następujące polecenie:
find . -type f -empty
Jeśli nie zostanie zwrócony żaden wynik, oznacza to, że w bieżącym katalogu nie ma pustego pliku.
Opcje i optymalizacje znajdowania plików w systemie Linux przy użyciu wiersza poleceń
Domyślna konfiguracja dla find ignoruje dowiązania symboliczne. Jeśli chcesz, aby find śledziło i zwracało dowiązania symboliczne, dodaj opcję -L do polecenia, jak pokazano poniżej:
find -O3 -L /var/www/ -name "*.html"
To polecenie włącza maksymalny poziom optymalizacji (-O3) i pozwala find śledzić dowiązania symboliczne (-L). find przeszukuje całe drzewo katalogów pod /var/www/ w poszukiwaniu plików, które kończą się na .html.
find optymalizuje swoją strategię filtrowania w celu zwiększenia wydajności. Trzy wybierane przez użytkownika poziomy optymalizacji są określone jako -O1, -O2 i -O3. Optymalizacja -O1 jest domyślna i zmusza find do filtrowania na podstawie nazwy pliku przed uruchomieniem wszystkich innych testów.
Optymalizacja na poziomie -O2 nadaje priorytet filtrom nazwy pliku, tak jak w -O1, a następnie uruchamia wszystkie filtry typu pliku przed przejściem do innych, bardziej zasobochłonnych warunków. Optymalizacja na poziomie -O3 umożliwia find przeprowadzenie najsurowszej optymalizacji i zmienia kolejność wszystkich testów na podstawie ich względnego kosztu i prawdopodobieństwa powodzenia.
| Command | Description |
|---|---|
-O1 |
Filtruj najpierw na podstawie nazwy pliku (domyślnie). |
-O2 |
Najpierw nazwa pliku, potem typ pliku. |
-O3 |
Umożliwia find automatyczną zmianę kolejności wyszukiwania na podstawie efektywnego wykorzystania zasobów i prawdopodobieństwa. sukcesu |
-maxdepth X |
Wyszukuje bieżący katalog, jak również wszystkie podkatalogi na głębokości X poziomów. |
-iname |
Wyszukuje bez względu na wielkość liter. |
-not |
Wraca tylko wyniki, które nie pasują do przypadku testowego. |
-type f |
Wyszukiwanie plików. |
-type d |
Wyszukiwanie katalogów. |
Wyszukiwanie plików w systemie Linux według czasu modyfikacji za pomocą wiersza poleceń
Polecenie find może filtrować hierarchię katalogów na podstawie tego, kiedy plik został ostatnio zmodyfikowany. Na przykład następujące polecenie znajdzie każdy plik z rozszerzeniem .err, który został zmodyfikowany w ciągu ostatnich 7 dni:
find / -name "*err" -mtime -7
Przykładowe polecenie zwraca następujące dane wyjściowe:
/home/username/directory_3/example.err/home/username/username/example.err/home/username/username/directory_2/example.err/home/username/username/directory_1/example.err/home/username/username/directory_1/subdirectory_1/example.err
Use Grep to Find Files in Linux Using the Command Line
Polecenie find jest w stanie filtrować hierarchię katalogów tylko na podstawie nazwy pliku i metadanych. Jeśli potrzebujesz wyszukiwać na podstawie zawartości pliku, użyj narzędzia takiego jakegrep. Rozważmy następujący przykład:
find . -type f -exec grep "test" '{}' \; -print
To polecenie przeszukuje każdy obiekt w bieżącej hierarchii katalogów (.), który jest plikiem (-type f), a następnie uruchamia polecenie grep "test" dla każdego pliku spełniającego warunki. Pasujące pliki są wypisywane na ekranie (-print). Nawiasy klamrowe ({}) są uchwytem dla wyników wyszukiwania. Nawiasy {} są ujęte w pojedyncze cudzysłowy ('), aby uniknąć przekazania grep błędnie sformułowanej nazwy pliku. Polecenie -exec jest zakończone średnikiem (;), który powinien być escape’owany (\;), aby uniknąć interpretacji przez powłokę.
Plik użyty w przykładzie (example.err) ma wewnątrz tekst o treści „test”. Gdy uruchomisz przykładowe polecenie, zobaczysz podobne wyjście:
test./directory_3/example.errtest./example.errtest./directory_2/example.errtest./directory_1/example.errtest./directory_1/subdirectory_1/example.err
Grep zidentyfikował każdy plik w bieżącym katalogu roboczym, który zawiera łańcuch „test”.
Uwaga
Przed zaimplementowaniem w poleceniu
findopcji-execmożna było wygenerować podobne dane wyjściowe do powyższego przykładu za pomocą poleceniaxargs:find . -type f -print | xargs grep "test"
Przetwarzanie i znajdowanie plików za pomocą polecenia Znajdź w systemie Linux
Opcja -exec uruchamia polecenia przeciwko każdemu obiektowi pasującemu do wyrażenia find. Rozważmy następujący przykład:
find . -name "example.err" -exec chmod o+r '{}' \;
To filtruje każdy obiekt w bieżącej hierarchii (.) w poszukiwaniu plików o nazwie rc.conf i uruchamia polecenie chmod o+r, aby zmodyfikować uprawnienia plików wyników polecenia find.
Przykładowe polecenie uruchamia i wykonuje opcję -exec w katalogu głównym procesu find. Użyj opcji -execdir, aby wykonać określone polecenie w katalogu, w którym znajduje się dopasowanie. Może to złagodzić obawy związane z bezpieczeństwem i zapewnić lepszą wydajność w przypadku niektórych operacji.
Opcje -exec lub -execdir są uruchamiane bez dalszych monitów. Jeśli wolisz otrzymywać monity przed podjęciem działania, zamień -exec na -ok lub -execdir na -okdir.
How to Find and Delete Files Using the Linux Command Line
Caution
Use this option with extreme caution.
Add the option -delete to the end of a match expression to delete all files that match. Użyj tej opcji, jeśli jesteś pewien, że wyniki pasują tylko do plików, które chcesz usunąć.
W poniższym przykładzie find rekurencyjnie lokalizuje wszystkie pliki w hierarchii, zaczynając od bieżącego katalogu i usuwa wszystkie pliki, które kończą się rozszerzeniem .err:
find . -name "*.err" -delete
Wciąż masz kilka pytań?
Dołącz do naszej społeczności i opublikuj swoje pytania, aby inni entuzjaści Linode i Linuksa mogli Ci pomóc.
Powiązane pytania: