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
options
kontroluje zachowanie i metodę optymalizacji procesufind
. - Atrybut
starting/path
definiuje katalog najwyższego poziomu, w którymfind
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ą 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: