Jak znaleźć pliki w systemie Linux przy użyciu wiersza poleceń

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

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 options kontroluje zachowanie i metodę optymalizacji procesu find.
  • Atrybut starting/path definiuje katalog najwyższego poziomu, w którym find rozpoczyna filtrowanie.
  • Atrybut expression kontroluje 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 find opcji -exec można było wygenerować podobne dane wyjściowe do powyższego przykładu za pomocą polecenia xargs:

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:

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.