Znajdź pliki i katalogi w Linuksie za pomocą polecenia find | Opensource.com

niezależnie od tego, jak zorganizowałem się, wydaje się, że zawsze są chwile, kiedy po prostu nie mogę zlokalizować pliku. Czasami to dlatego, że nie pamiętam nazwy pliku w pierwszej kolejności. Innym razem znam to imię, ale nie pamiętam, gdzie postanowiłem je zachować. Są nawet chwile, kiedy potrzebuję pliku, którego nie utworzyłem w pierwszej kolejności. Bez względu na rozterkę, wiem jednak, że w systemie POSIX zawsze mam polecenie find.

instalacja znajdź

polecenie find jest zdefiniowane przez specyfikację POSIX, która tworzy otwarty standard, za pomocą którego mierzone są systemy POSIX (w tym Linux, BSD i macOS). Mówiąc najprościej, masz już find zainstalowany tak długo, jak używasz Linuksa, BSD lub macOS.

jednak nie wszystkie polecenia find są dokładnie takie same. Na przykład polecenie GNU find ma cechy, których polecenie BSD, Busybox lub Solaris find może nie mieć Lub Ma, ale implementuje inaczej. Ten artykuł używa GNU find z pakietu findutils, ponieważ jest łatwo dostępny i dość popularny. Większość poleceń przedstawionych w tym artykule działa z innymi implementacjami find, ale jeśli wypróbujesz polecenie na platformie innej niż Linux i uzyskasz nieoczekiwane rezultaty, spróbuj pobrać i zainstalować wersję GNU.

Znajdź plik po nazwie

możesz zlokalizować plik po jego nazwie, podając pełną nazwę pliku lub jego części za pomocą wyrażeń regularnych. Polecenie find wymaga ścieżki do katalogu, w którym chcesz wyszukiwać, opcji określających szukany atrybut (na przykład –name dla nazwy pliku uwzględniającej wielkość liter), a następnie szukanego ciągu. Domyślnie szukany ciąg jest traktowany dosłownie: polecenie find wyszukuje nazwę pliku, która jest dokładnie tym samym ciągiem, który wpisujesz między cudzysłowami, chyba że używasz składni wyrażenia regularnego.

Załóżmy, że twój katalog dokumentów zawiera cztery pliki: Foo, foo, foobar.txt, i foo.xml Oto dosłowne wyszukiwanie pliku o nazwie “foo”:

$ find ~ -name "foo"
/home/tux/Documents/examples/foo

możesz Rozszerzyć wyszukiwanie, nie rozróżniając wielkości liter za pomocą opcji -iname :

$ find ~ -iname "foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo

symbole wieloznaczne

możesz użyć podstawowych znaków wieloznacznych powłoki, aby rozszerzyć wyszukiwanie. Na przykład gwiazdka (*) reprezentuje dowolną liczbę znaków:

$ find ~ -iname "foo*"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt

znak zapytania (?) reprezentuje pojedynczy znak:

$ find ~ -iname "foo*.???"
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt

nie jest to składnia wyrażeń regularnych, więc kropka (.) reprezentuje literalną kropkę w tym przykładzie.

wyrażenia regularne

możesz również używać wyrażeń regularnych. Podobnie jak w przypadku -iname i -name, istnieje opcja uwzględniająca wielkość liter i niewrażliwa na wielkość liter. W przeciwieństwie do opcji -name i -iname, wyszukiwanie -regex i -iregex jest stosowane do całej ścieżki, a nie tylko do nazwy pliku. Oznacza to, że jeśli szukasz foo, nie otrzymasz wyników, ponieważ foo nie pasuje do /home/tux/Documents/foo. Zamiast tego musisz albo wyszukać całą ścieżkę, albo użyć sekwencji wieloznacznej na początku łańcucha:

$ find ~ -iregex ".*foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo

Znajdź plik zmodyfikowany w ciągu ostatniego tygodnia

aby znaleźć plik ostatnio zmodyfikowany w zeszłym tygodniu, użyj opcji -mtime wraz z (ujemną) liczbą dni w przeszłości:

$ find ~ -mtime -7
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt

Znajdź plik zmodyfikowany w zakresie dni

możesz połączyć opcje -mtime, aby znaleźć plik w zakresie dni. Dla pierwszego argumentu -mtime podaj najnowszą liczbę dni, które mogłeś zmodyfikować w pliku, a dla drugiego podaj największą liczbę dni. Na przykład, to wyszukiwanie wyszukuje pliki z modyfikacjami razy więcej niż jeden dzień w przeszłości, ale nie więcej niż siedem:

$ find ~ -mtime +1 -mtime -7

Ogranicz wyszukiwanie według typu pliku

często optymalizuje się wyniki find, określając typ pliku, którego szukasz. Nie powinieneś używać tej opcji, jeśli nie jesteś pewien, czego szukasz, ale jeśli wiesz, że szukasz Pliku, a nie katalogu, lub katalogu, ale nie pliku, to może to być świetny filtr do użycia. Opcja jest -type, a jej argumenty są kodem literowym reprezentującym kilka różnych rodzajów danych. Najczęstsze to:

  • d – katalog
  • f – plik
  • l – dowiązanie symboliczne
  • s – Gniazdo
  • p – nazwana rura (używana dla FIFO)
  • b – Block special (Zwykle oznaczenie dysku twardego)

oto kilka przykładów:

$ find ~ -type d -name "Doc*"
/home/tux/Documents
$ find ~ -type f -name "Doc*"
/home/tux/Downloads/10th-Doctor.gif
$ find /dev -type b -name "sda*"
/dev/sda
/dev/sda1

Dostosuj zakres

polecenie find jest domyślnie rekurencyjne, co oznacza, że wyszukuje wyniki w katalogach katalogów zawartych w katalogach (i tak dalej). Może to być przytłaczające w dużym systemie plików, ale możesz użyć opcji -maxdepth, aby kontrolować, jak głęboko w strukturę folderów chcesz zejść find :

$ find /usr -iname "*xml" | wc -l
15588
$ find /usr -maxdepth 2 -iname "*xml" | wc -l
15

możesz na przemian ustawić minimalną głębokość rekurencji za pomocą -mindepth:

$ find /usr -mindepth 8 -iname "*xml" | wc -l
9255

Pobierz ściągawkę

ten artykuł obejmuje tylko podstawowe funkcje find. Jest to świetne narzędzie do przeszukiwania systemu, ale jest również bardzo użytecznym interfejsem dla potężnego polecenia równoległego. Istnieje wiele powodów, aby dowiedzieć się find, więc pobierz naszą bezpłatną ściągawkę find, aby pomóc ci dowiedzieć się więcej o poleceniu.

Leave a Reply