FIND(1)

NAZWA
find - szuka plików w drzewie katalogów

SKŁADNIA
find [-H] [-L] [-P] [-D opcje-debugowania] [-Opoziom] [punkt-początkowy...] [wyrażenie]

OPIS
Ta strona podręcznika man opisuje wersję GNU programu find. GNU find przeszukuje drzewo katalogowe, zakorzenione w każdej z podanych punktów początkowych. Wykonuje przy tym podane wyrażenie od lewej do prawej, zgodnie z zasadami priorytetów (rozdział OPERATORY), aż do ustalenia wyniku (lewa strona jest fałszywa dla operacji and, a prawdziwa dla or), co powoduje przejście do następnej nazwy pliku. Jeśli nie podano punktu początkowego, przyjmuje się ".".

W przypadku używania find w środowisku, w którym istotne jest bezpieczeństwo (np. przy przeszukiwaniu katalogów, które są zapisywalne dla innych użytkowników), należy zapoznać się z rozdziałem "Security Considerations" w dokumentacji findutils, pod nazwą Finding Files. Dokument ten (w języku angielskim) jest bardziej szczegółowy i opisowy niż niniejsza strona podręcznika systemowego, więc może okazać się przydatniejszym źródłem informacji.

OPCJE
Opcje -H, -L i -P kontrolują sposób traktowania dowiązań symbolicznych. Kolejne argumenty wiersza poleceń powinny być plikami lub katalogami do przeszukania, aż do pierwszego argumentu rozpoczynającego się znakiem "-" albo argumentu "(" lub "!". Argumenty te (razem z następnymi) są rozpoznawane jako wyrażenie opisujące to, co ma zostać przeszukane. Jeśli nie zostanie podana ścieżka, użyty będzie bieżący katalog. W przypadku braku wyrażenia, używane jest domyślne wyrażenie -print (lecz wówczas i tak zapewne lepsze byłoby skorzystanie z -print0).

Niniejsza strona podręcznika opisuje "opcje" w liście wyrażeń. Opcje te kontrolują zachowanie find, lecz są podane zaraz za ostatnią nazwą ścieżkową. Z kolei pięć "prawdziwych" opcji (-H, -L, -P, -D i -O) musi pojawić się przed ścieżką, oczywiście jeśli okażą się potrzebne. Podwójny dywiz -- może teoretycznie posłużyć do zasygnalizowania, że pozostałe argumenty nie są opcjami, jednak w praktyce to nie działa zbyt dobrze ze względu na sposób, w jaki find określa koniec kolejnych argumentów ścieżkowych: robi to odczytując je do momentu pojawienia się argumentu wyrażenia (które również zaczyna się od "-"). Zatem jeśli argument ścieżki zaczynałby się od "-", to find potraktowałby go jako argument wyrażenia. Z tego powodu, aby zapewnić, że wszystkie punkty początkowe są prawidłowo interpretowane, a w szczególności aby uniknąć sytuacji, gdy wieloznaczniki rozwinięte przez wywołującą powłokę zostałyby potraktowane jako argumenty wyrażeń, bezpieczniej jest albo poprzedzać wieloznaczniki lub dwuznaczne nazwy ścieżek znakami "./", albo podawać ścieżki jako absolutne, zaczynające się od "/". Alternatywnym, choć nieprzenośnym, zwykle bezpiecznym sposobem przekazywania dowolnych punktów początkowych wyszukiwań do find, jest korzystanie z opcji GNU -files0-from

-P  Nigdy nie podąża za dowiązaniami symbolicznymi. Jest to zachowanie domyślne. Gdy find sprawdza lub wypisuje informacje o plikach, a jest on dowiązaniem symbolicznym, to użyta informacja powinna być wzięta z właściwości samego dowiązania symbolicznego.

-L  Podąża za dowiązaniami symbolicznymi. Gdy find sprawdza lub wypisuje informacje o plikach, to powinny być one wzięte z właściwości pliku, na który wskazuje dowiązanie symboliczne, a nie z samego dowiązania (chyba, że jest to zerwane dowiązanie symboliczne lub find nie może sprawdzić pliku, na który wskazuje dowiązanie). Użycie tej opcji implikuje -noleaf. Jeśli użyje się później -P, to -noleaf wciąż będzie działać. Jeśli działa -L, a find podczas wyszukiwania odkryje dowiązanie symboliczne do podkatalogu, to przeszukany zostanie podkatalog, na który wskazuje dowiązanie.

    Gdy działa opcja -L, to wskazanie -type zawsze będzie dopasowane w odniesieniu do typu pliku, na który wskazuje dowiązanie, zamiast do samego dowiązania (chyba, że jest ono zerwane). Akcje, które mogą spowodować zrywanie dowiązań symbolicznych w trakcie działania find (np. -delete) mogą spowodować dezorientujące zachowanie. Użycie -L spowoduje, że wskazanie -lname i -ilname zawsze zwróci fałsz.

-H  Nie podąża za dowiązaniami symbolicznymi, z wyjątkiem przetwarzania argumentów wiersza polecenia. Gdy find sprawdza lub wypisuje informacje o plikach, powinny być one brane z właściwości samego dowiązania symbolicznego. Jedynym wyjątkiem jest sytuacja, gdy plik podany w wierszu polecenia jest dowiązaniem symbolicznym i może być ono rozwiązane. Wówczas informacja jest brana z tego, na co wskazuje dowiązanie (tj. podąża się za dowiązaniem). Informacja z samego dowiązania jest używana w razie, gdy plik, na który wskazuje dowiązanie nie może być sprawdzony. Gdy działa -H i jedna ze ścieżek podanych w wierszu polecenia jest dowiązaniem symbolicznym do katalogu, sprawdzana jest zawartość tego katalogu (zapobiegnie temu skorzystanie z -maxdepth 0).

Jeśli podano więcej niż jedną z opcji -H, -L i -P, każda przesłania poprzednią - liczy się ostatnia podana w wierszu polecenia, Ponieważ opcja -P jest domyślna, powinno się ją uznać za działającą, chyba że podano -H lub -L.

GNU find często sprawdza status plików podczas przetwarzania samego wiersza polecenia, przed rozpoczęciem właściwego przeszukiwania. Opcje te mogą również wpływać na sposób przetworzenia argumentów. Co więcej, istnieje wiele testów, które porównują pliki z wiersza polecenia do aktualnie rozważanego pliku. W każdym przypadku, plik podany w wierszu polecenia będzie sprawdzony i niektóre z jego właściwości zostaną zachowane. Jeżeli nazwany plik jest w rzeczywistości dowiązaniem symbolicznym, a działa opcja -P (lub nie podano -H, ani -L), to informacja użyta do porównania zostanie wzięta z właściwości dowiązania symbolicznego. W przeciwnym razie, właściwości będą wzięte z pliku, na który wskazuje dowiązanie. Jeżeli find nie może podążyć za dowiązaniem (np. ponieważ ma niewystarczające uprawnienia lub dowiązanie wskazuje na nieistniejący plik) zostaną użyte właściwości samego dowiązania.

Gdy działa opcja -H lub -L, rozwiązywane są wszystkie dowiązania symboliczne podane jako argument do opcji -newer, a znaczniki czasowe będą wzięte z pliku, na który wskazuje dowiązanie symboliczne. To samo dotyczy opcji -newerXY, -anewer i -cnewer.

Opcja -follow ma podobne działanie do -L, choć działa tylko w miejscu pojawienia się (tj. jeśli -L nie jest użyte, a skorzystano z -follow, to wszystkie dowiązania symboliczne pojawiające się w wierszu poleceń za -follow zostaną rozwiązane, lecz umieszczone wcześniej - nie).

-D debugopts
    Wyświetla informacje diagnostyczne - może okazać się przydatna do zdiagnozowania przypadków, gdy find nie robi tego czego od niego oczekujemy. Lista opcji debugowania powinna być oddzielona przecinkami. Nie gwarantuje się kompatybilności opcji debugowania pomiędzy wydaniami findutils. Pełną listę prawidłowych opcji debugowania wyświetli polecenie find -D help. Są to między innymi:

    exec
        Wyświetla informacje diagnostyczne związane z -exec, -execdir, -ok i -okdir.

    opt Wyświetla informacje diagnostyczne związane z optymalizację drzewka wyrażeń; patrz opcja -O.

    rates
        Wyświetla podsumowanie wskazujące częstość sukcesu lub porażki każdego wskazania.

    search
        Informuje o przechodzeniu przez drzewo katalogów.

    stat
        Wyświetla komunikaty o plikach sprawdzanych przez wywołania systemowe stat i lstat. Program find stara się zminimalizować liczbę takich wywołań.

    tree
        Wyświetla drzewko wyrażeń w formie oryginalnej i zoptymalizowanej.

    all Włącza wszystkie inne opcje debugowania (poza help).

    help
        Objaśnia opcje debugowania.

-Opoziom
    Włącza optymalizację zapytań. Program find zmienia kolejność testów, aby przyspieszyć wykonanie przy zachowaniu efektu końcowego; tj. nie zmienia się wskazań z efektami ubocznymi w stosunku do każdego innego. Optymalizacje są przeprowadzane zgodnie z poniższymi poziomami optymalizacji.

    0   Odpowiednik poziomu optymalizacji 1.

    1   Jest to domyślny poziom optymalizacji i odnosi się do tradycyjnego zachowania. Kolejność wyrażeń jest zmieniana w ten sposób, że testy działające tylko na nazwach plików (np. -name lub -regex) są wykonywane jako pierwsze.

    2   Testy -type lub -xtype są wykonywane po testach działających tylko na nazwach plików, lecz przed testami wymagającymi informacji z i-węzła. W wielu współczesnych wersjach Uniksa, typy plików są zwracane przez readdir(), a więc są szybsze do sprawdzenia niż wskazówki, które wymagają uprzedniego wykonania stat. Jeśli korzysta się z wskazań -fstype FOO i poda się typ systemu plików FOO, który nie jest znany (tj. nieobecny w "/etc/mtab") w momencie uruchomienia find, wskazanie to będzie równoważne -false.

    3   Na tym poziomie optymalizacji, włączona jest pełna optymalizacja, działająca w oparciu o koszt zapytań. Kolejność testów jest modyfikowana w taki sposób, aby tanie (szybkie) testy były przeprowadzane wcześniej, a droższe - później, jeśli to konieczne. Wewnątrz każdej grupy kosztowej, wskazania są przeprowadzane wcześniej lub później, zgodnie z prawdopodobieństwem ich powodzenia. Przy -o, wskazania o większym prawdopodobieństwie sukcesu są przeprowadzane wcześniej, a przy -a, wcześniej wykonywane są wskazania o większym prawdopodobieństwie niepowodzenia.

    Optymalizator działający w oparciu o koszty, ma z góry przyjęte założenie o prawdopodobieństwie powodzenia danego testu. W niektórych przypadkach, prawdopodobieństwo bierze pod uwagę naturę testu (np. -type f powinien kończyć się sukcesem częściej niż -type c). Optymalizator jest jeszcze w fazie kalkulacji. Jeśli nie poprawi to wydajności programu find, zostanie ponownie usunięty. Podobnie, optymalizacje, które udowodnią swą rzetelność, spójność i efektywność, mogą w przyszłości zostać włączone na niższym poziomie optymalizacyjnym. Jednak domyślne zachowanie (poziom optymalizacji 1) nie zmieni się w wydaniach 4.3.x. Zestaw testów findutils wykonuje wszystkie testy find na każdym poziomie optymalizacji, aby mieć pewność, że wyniki pozostają te same.

    Zmiana kolejności wykonywanych operacji dokonana przez optymalizator kosztowy może spowodować odczuwalną dla użytkownika zmianę zachowania. Na przykład wskazania -readable i -empty są wrażliwe na zmianę kolejności. Jeśli zostaną uruchomione w kolejności -empty -readable, dla nieodczytywalnych katalogów zostanie wypisany błąd. Z kolei w kolejności -readable -empty taki błąd nie wystąpi. Jest to powód, dla którego tego typu zmiana kolejności operacji nie jest dokonywana na domyślnym poziomie optymalizacji.

WYRAŻENIE
Część wiersza poleceń po liście punktów początkowych jest wyrażeniem. Jest to rodzaj określenia zapytania, opisującego w jaki sposób dopasowywać pliki i co z nimi zrobić po dopasowaniu. Wyrażenie składa się z kilku rzeczy:

Testy
    Testy zwracają prawdę lub fałsz, zwykle na podstawie jakiejś własności rozważanego pliku. Na przykład test -empty jest prawdziwy tylko, gdy bieżący plik jest pusty.

Akcje
    Akcje mają efekty poboczne (takie jak wypisywanie czegoś na standardowym wyjściu) i zwracają prawdę lub fałsz, zwykle w zależności od tego, czy się powiodą. Akcje -print wypisuje na przykład nazwę bieżącego pliku na standardowym wyjściu.

Opcje globalne
    Opcje globalne wpływają na działanie testów i akcji podanych w dowolnej części wiersza poleceń. Opcje globalne zawsze zwracają prawdę. Na przykład opcja -depth powoduje, że find przechodzi przez system plików, zagłębiając się najpierw w katalogach.

Opcje pozycyjne
    Opcje pozycyjne wpływają tylko na testy lub akcje, które występują za nimi. Opcja pozycyjne zawsze zwracają prawdę. Na przykład opcja -regextype jest pozycyjna, określa dialekt wyrażeń regularnych, dla wyrażeń regularnych, które pojawią się dalej w wierszu polecenia.

Operatory
    Operatory łączą inne rzeczy w wyrażeniu. Obejmują na przykład -o (oznaczające logiczne LUB — OR) oraz -a (oznaczające logiczne ORAZ — AND). Tam, gdzie nie podano operatora, przyjmowane jest -a.

Akcja -print jest wykonywana na wszystkich plikach, dla których prawdziwe jest całe wyrażenie, chyba że zawiera ono akcję inną niż -prune lub -quit. Akcjami wstrzymującymi domyślne -print są: -delete, -exec, -execdir, -ok, -okdir, -fls, -fprint, -fprintf, -ls, -print i -printf.

Akcja -delete działa również jak opcja (ponieważ wymusza -depth).

  OPCJE POZYCYJNE
Opcje pozycyjne zawsze zwracają prawdę. Wpływają jedynie na testy, które znajdują się za nimi w wierszu polecenia.

-daystart
    Mierzy czasy (dla -amin, -atime, -cmin, -ctime, -mmin i -mtime) od dziś, a nie od 24 godzin temu. Opcja ta wpływa jedynie na testy, pojawiające się później w wierszu polecenia.

-follow
    Przestarzałe, proszę zamiast tego użyć opcji -L. Rozwiązuje dowiązania symboliczne. Implikuje -noleaf. Opcja -foolow działa jedynie na testy pojawiające się w wierszu polecenia za nią. O ile nie poda się opcji -H lub -L, pozycja opcji -follow zmienia zachowanie wskazania -newer - pliki będące argumentami -newer zostaną rozwiązane, jeśli są dowiązaniami symbolicznymi. To samo dotyczy opcji -newerXY, -anewer and -cnewer. Podobnie, wskazanie -type zostanie zawsze dopasowane do pliku wskazanego przez dowiązanie symboliczne, zamiast do samego dowiązania. Użycie -follow powoduje, że wskazania -lname i -ilname zawsze zwracają fałsz.

-regextype typ
    Zmienia składnię wyrażeń regularnych rozumianych przez testy -regex i -iregex podane później w wierszu poleceń. Znane typy wyrażeń regularnych wypisze -regextype help. Dokumentacja Texinfo (zob. ZOBACZ TAKŻE) wyjaśnia znaczenie i różnice między poszczególnymi typami wyrażeń regularnych. Jeśli nie użyje się tej opcji, find zachowuje się tak, jakby podano typ wyrażeń regularnych emacs.

-warn, -nowarn
    Odpowiednio: włącza lub wyłącza ostrzeżenia. Odnoszą się one wyłącznie do użycia wiersza poleceń, a nie do warunków zastanych przez find podczas przeszukiwania katalogów. Domyślne zachowanie odpowiada -warn gdy standardowym wejściem jest tty i -nowarn w przeciwnym wypadku. Jeśli utworzone zostanie ostrzeżeń związane z użycie wiersza polecenia, nie ma to wpływu na status zakończenia find. Jeśli ustawiono zmienną środowiskową POSIXLY_CORRECT i podano również -warn nie jest określone które, ani czy w ogóle, ostrzeżenia będą aktywne.

  OPCJE GLOBALNE
Opcje globalne zawsze zwracają prawdę. Opcje globalne działają nawet wobec testów, które występują wcześniej w wierszu polecenia. Aby uniknąć zamieszania, opcje globalne należy podawać w wierszu polecenia po liście punktów początkowych, a przed pierwszymi testami, opcjami pozycyjnymi lub akcjami. Jeśli poda się opcję globalną w innym miejscu, find wypisze ostrzeżenie, wyjaśniające że może być to mylące.

Opcje globalne pojawiają się po liście punktów początkowych, zatem nie są opcjami tego samego typu jak np. -L.

-d  Synonim -depth, ze względu na kompatybilność z FreeBSD, NetBSD, MacOS X i OpenBSD.

-depth
    Przetwarza zawartość każdego katalogu przed samym katalogiem jako takim. Akcja -delete implikuje także -depth.

-files0-from plik
    Odczytuje punkty początkowe z pliku zamiast uzyskiwać je z wiersza poleceń. W odróżnieniu od znanych ograniczeń związanych z przekazywaniem punktów początkowych jako argumenty w wierszu poleceń, w szczególności ograniczeń związanych z liczbą nazw plików, a także nieodłączną niepewnością jeśli chodzi o różnicowanie nazw plików z nazwami opcji, użycie tej opcji pozwala na bezpieczne przekazanie dowolnej liczby punktów początkowych programowi find.

    Korzystanie z tej opcji oraz przekazanie punktów początkowych w wierszu polecenia wyklucza się wzajemnie, zatem nie można tego zrobić w tym samym czasie.

    Argument plik jest obowiązkowy. Można użyć postaci -files0-from -, aby odczytać listę punktów początkowych ze strumienia standardowego wejścia i np. z potoku. W takim przypadku nie są dozwolone akcje -ok i -okdir, ponieważ oczywiście kolidowałyby z odczytywaniem ze standardowego wejścia w celu uzyskania potwierdzeń od użytkownika.

    Punkty początkowe w pliku należy rozdzielać znakami NUL ASCII. Dwa znaki NUL następujące po sobie tj. punkt początkowy z nazwą pliku o zerowej długości nie są dopuszczalne i spowodują wypisanie błędu wraz z późniejszym niezerowym statusem zakończenia.

    Jeśli podany plik będzie pusty, find nie przetworzy punktu początkowego, zatem wyjdzie bezpośrednio po przetworzeniu argumentów programu. Różni się to od standardowego wywołania find gdy, jeśli nie poda się argumentu ścieżki, program przyjmuje katalog bieżący jako punkt początkowy.

    Poza tym, przetwarzanie punktów początkowych następuje wedle zwykłych reguł np. find przejdzie rekurencyjnie do podkatalogów, o ile nie wskazano inaczej. Aby przetworzyć tylko punktu początkowe, można podać dodatkowo -maxdepth 0.

    Dalsze uwagi: jeśli poda się ten sam plik kilkakrotnie w pliku wejściowym, jest nieokreślone, czy zostanie odwiedzony więcej niż raz. Jeśli plik zostanie zmieniony podczas działania find, wynik jest również nieokreślony. Dodatkowo, pozycja przeszukania w nazwanym pliku, w momencie gdy find wyjdzie, ze względu na -quit lub z innej przyczyny, także jest nieokreślona. Przez "nieokreślone" rozumiemy tu fakt, że może to zadziałać lub nie albo dokonać jakiejś rzeczy, a zachowanie to może różnić się między platformami oraz między wydaniami findutils.

-help, --help
    Wypisuje sposób użycia find z wiersza poleceń i kończy pracę programu.

-ignore_readdir_race
    Zwykle find wyświetla błąd, gdy nie uda mu się pobrać statusu pliku. Po podaniu tej opcji i usunięciu pliku pomiędzy odczytem przez find nazwy pliku z katalogu i momentem próby pobrania statusu, błąd nie zostanie wyświetlony. Dotyczy to również plików i katalogów podanych w wierszu polecenia. Opcja ta zaczyna działać już przy odczycie wiersza polecenia, co oznacza, że nie da się przeszukiwać systemu plików częściowo z opcją włączoną i częściowo z wyłączoną (aby to zrobić, konieczne jest dwukrotne uruchomienie polecenia find, jeden raz z opcją włączoną, a drugi - z wyłączoną).

    Co więcej, find z opcją -ignore_readdir_race zignoruje błędy akcji -delete w przypadku, gdy plik zniknie od momentu odczytania katalogu macierzystego: program nie wypisze żadnego błędu, a zwracanym kodem akcji -delete będzie prawda.

-maxdepth głębokość
    Schodzi maksymalnie o głębokość (nieujemna liczba całkowita) poziomów katalogów od punktów początkowych. Podanie -maxdepth 0 oznacza, że testy i akcje stosują się tylko do samych punktów początkowych.

-mindepth głębokość
    Nie stosuje testów lub akcji w poziomach niższych niż głębokość (nieujemna liczba całkowita). Użycie mindepth 1 oznacza przetwarzanie wszystkich plików poza punktami początkowymi.

-mount
    Nie zagłębia się w katalogi na innych systemach plików. Jest to alternatywna nazwa dla -xdev, stworzona dla zgodności z innymi wersjami find.

-noignore_readdir_race
    Wyłącza efekt opcji -ignore_readdir_race.

-noleaf
    Zakazuje optymalizacji wykonywanej przez zakładanie, że katalogi zawierają o dwa podkatalogi mniej niż ich licznik dowiązań zwykłych (twardych). Opcja ta jest wymagana podczas przeszukiwania systemów plików, które nie używają uniksowej konwencji wiązania katalogów, takich jak systemy plików CD-ROM, MS-DOS czy wolumeny AFS. Każdy katalog w normalnym systemie uniksowym zawiera przynajmniej dwa twarde dowiązania: jego nazwę i ".". Dodatkowo, jego podkatalogi będą do niego dowiązane za pomocą ".." każdy. Gdy find testuje katalog po zbadaniu funkcją stat o 2 mniej podkatalogów niż licznik dowiązań, wie, że reszta wpisów jest niekatalogowa (są to "liście" - "leaf" w drzewie katalogów). Jeśli testowane mają być tylko nazwy plików, to nie ma potrzeby ich sprawdzać; daje to znaczące przyspieszenie.

-version, --version
    Wypisuje wersję i kończy pracę.

-xdev
    Nie zagłębia się w katalogi na innych systemach plików.

  TESTY
Niektóre testy np. -newerXY i -samefile pozwalają na porównanie pomiędzy aktualnie sprawdzanym plikiem i plikiem odniesienia podanym w wierszu polecenia. Gdy te testy są używane, interpretacja pliku odniesienia zależy od opcji -H, -L i -P i podanej wcześniej -follow, lecz plik odniesienia jest sprawdzany tylko raz, przy przetwarzaniu wiersza polecenia. Jeśli plik odniesienia nie może zostać sprawdzony (np. wywołanie systemowe stat(2) nie powiedzie się na nim), wyświetlany jest błąd, a find wychodzi z niezerowym kodem zakończenia.

Do testów (takich jak -amin, -mtime, -gid, -inum, -links, -size, -uid i -used) można podać argument numeryczny n jako

+n  dla większych niż n,

-n  dla mniejszych niż n,

n   dla równych n.

Obsługiwane testy:

-amin n
    Dostęp do pliku nastąpił ostatnio wcześniej niż, dawniej niż lub dokładnie n minut temu.

-anewer odniesienie
    Czas ostatniego dostępu do bieżącego pliku jest późniejszy (nowszy) niż data ostatniej modyfikacji pliku odniesienia. Jeśli odniesienie jest dowiązaniem i działa jedna z opcji -H lub -L, to używany jest zawsze czas ostatniej modyfikacji pliku, na który wskazuje dowiązanie.

-atime n
    Dostęp do pliku miał miejsce wcześniej niż, później niż lub dokładnie n*24 godzin temu. Gdy find dowie się jak wiele okresów 24-godzinnych temu dostano się do pliku, ignorowana jest część ułamkowa; tak więc aby dopasować -atime +1, dostęp do pliku musiał być co najwyżej dwa dni temu.

-cmin n
    Status pliku został zmieniony wcześniej niż, później niż lub dokładnie n minut temu.

-cnewer odniesienie
    Czas ostatniej zmiany statusu do bieżącego pliku jest późniejszy (nowszy) niż data ostatniej modyfikacji pliku odniesienia. Jeśli odniesienie jest dowiązaniem i działa jedna z opcji -H lub -L, to używany jest zawsze czas ostatniej modyfikacji pliku, na który wskazuje dowiązanie.

-ctime n
    Status pliku został zmieniony wcześniej niż, dawniej niż lub dokładnie n*24 godzin temu. Proszę zapoznać się z komentarzami do -atime, aby zrozumieć wpływ zaokrąglenia na interpretację czasu modyfikacji pliku.

-empty
    Plik jest pusty i jest albo zwykłym plikiem, albo katalogiem.

-executable
    Dopasowuje pliki, które są wykonywalne i katalogi, które są przeszukiwalne (w sensie tłumaczenia nazw pliku) dla bieżącego użytkownika. Bierze pod uwagę listy kontroli dostępu (ACL) i inne zasady praw dostępu, które są ignorowane przez test -perm. Ten test używa wywołania systemowego access(2) i może być zmylony przez serwery NFS używające mapowania UID (lub root-squashing), gdyż wiele systemów implementuje access(2) w jądrze klienta i nie może użyć informacji mapowania UID po stronie serwera. Ponieważ test ten działa tylko w oparciu o wywołanie systemowe access(2), nie ma gwarancji, że plik dla którego test się powiódł, może być w rzeczywistości wykonany.

-false
    Zawsze fałszywe.

-fstype typ
    Plik jest na systemie plików o typie typ. Prawidłowe typy systemów plików różnią się na różnych wersjach Uniksa; ich niekompletna lista, która jest przyjmowana w części systemów to: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. Aby zobaczyć typy swoich systemów plików, należy użyć -printf z dyrektywą %F.

-gid n
    Numeryczny GID pliku, który wynosi mniej niż, więcej niż lub dokładnie n.

-group nazwag
    Plik należy do grupy nazwag (numeryczny GID jest dopuszczalny).

-ilname wzorzec
    Podobnie jak -lname, lecz dopasowanie jest niezależne od wielkości znaków. Jeśli działa opcja -L lub -follow, test zwraca fałsz, chyba że dowiązanie symboliczne jest zerwane.

-iname pattern
    Podobnie jak -name, lecz dopasowanie jest niezależne od wielkości znaków. Na przykład wzorce "fo*" i "F??" dopasują nazwy plików "Foo", "FOO", "foo", "fOo", itp. Wzorzec "*foo*" dopasuje również plik '.foobar'.

-inum n
    Plik ma numer i-węzła mniejszy niż, większy niż lub dokładnie równy n. Zwykle łatwiej jest użyć testu -samefile.

-ipath wzorzec
    Podobne do -path, lecz dopasowanie jest niewrażliwe na rozmiar liter.

-iregex wzorzec
    Podobne do -regex, lecz dopasowanie jest niewrażliwe na rozmiar liter.

-ilname pattern
    Patrz -ipath. Ta alternatywa jest mniej przenośna niż wspomniana opcja.

-links n
    Plik ma mniej niż, więcej niż lub dokładnie n dowiązań zwykłych (twardych).

-lname wzorzec
    Plik jest dowiązaniem symbolicznym, którego zawartość odpowiada wzorcowi powłoki wzorzec. Metaznaki nie traktują specjalnie "/" i ".". Jeśli działa opcja -L lub -follow, to test zwraca fałsz, chyba że dowiązanie symboliczne jest zerwane.

-mmin n
    Dane pliku były ostatnio modyfikowane wcześniej niż, później niż lub dokładnie n minut temu.

-mtime n
    Dane pliku zostały ostatnio zmodyfikowane wcześniej niż, później niż lub dokładnie n*24 godziny temu. Proszę zapoznać się komentarzami do opcji -atime, aby zrozumieć, w jaki sposób zaokrąglanie wpływa na interpretację czasów modyfikacji pliku.

-name wzorzec
    Bazowa nazwa pliku ("basename", ścieżka z usuniętymi poprzedzającymi katalogami) pasuje do wzorca powłoki wzorzec. Z powodu usunięcia początkowych katalogów, wzorzec nie powinien zawierać ukośnika, ponieważ "-name a/b" nigdy niczego nie dopasuje (i raczej powinno się wtedy użyć -path). Wyjątkiem jest użycie jako wzorca samego ukośnika ("-name /"), ponieważ jest to prawidłowy łańcuch dopasowujący katalog główny "/" (ponieważ nazwą bazową "/" jest "/"). Jeśli spróbuje się podać wzorzec zawierający - ale nieskładający się wyłącznie z - ukośnika, wypisane zostanie ostrzeżenie, chyba że ustawiono zmienną środowiskową POSIXLY_CORRECT, albo użyto opcji -nowarn.

    Do zignorowania katalogu i podrzędnych mu plików, zamiast sprawdzania każdego pliku w drzewie należy użyć -prune, zob. przykład w opisie tej akcji. Nawiasy klamrowe nie są rozpoznawane jako specjalne, niezależnie od faktu, że niektóre powłoki, w tym Bash, nadają mu specjalne znaczenie we wzorcach powłoki. Dopasowanie nazwy pliku jest przeprowadzane za pomocą funkcji bibliotecznej fnmatch(3). Proszę nie zapomnieć ująć wzorca w cudzysłowy, aby zapobiec interpretacji go przez powłokę.

-newer odniesienie
    Czas ostatniej modyfikacji bieżącego pliku jest późniejszy (nowszy) niż data ostatniej modyfikacji pliku odniesienia. Jeśli odniesienie jest dowiązaniem i działa jedna z opcji -H lub -L, to używany jest zawsze czas ostatniej modyfikacji pliku, na który wskazuje dowiązanie.

-newerXY odniesienie
    Powodzi się, jeśli znacznik czasu X rozważanego pliku jest nowszy niż znacznik czasu Y pliku odniesienia. Litery X i Y mogą być dowolnymi z poniższych:

    a | Czas dostępu (ang. access) pliku odniesienie
    B | Czas powstania (ang. birth) pliku odniesienie
    c | Czas zmiany (ang. change) statusu i-węzła odniesienia
    m | Czas modyfikacji pliku odniesienie
    t | odniesienie jest interpr. bezpośrednio jako czas (ang. time)

    Niektóre kombinacje są nieprawidłowe, np. X nie może być t. Część kombinacji nie jest zaimplementowanych we wszystkich systemach, do takich należy np. B. Jeśli poda się nieprawidłową lub nieobsługiwaną kombinację XY, otrzymuje się błąd krytyczny. Określenia czasowe są interpretowane jak argument do opcji -d GNU date. Jeżeli czas powstania pliku odniesienia nie może być ustalony, to przy próbie użycia go wynikiem jest komunikat o błędzie krytycznym. Jeśli poda się test, odnoszący się do czasu powstania sprawdzanych plików, to test ten nie powiedzie się dla wszystkich plików, których czas ten jest nieznany.

-nogroup
    Do numerycznego GID pliku nie pasuje żadna grupa.

-nouser
    Do numerycznego UID pliku nie pasuje żaden użytkownik.

-path wzorzec
    Nazwa pliku odpowiada wzorcowi powłoki wzorzec. Metaznaki nie traktują specjalnie "/" lub "."; tak więc na przykład,
    find . -path "./sr*sc"
    Wypisze wpis dla katalogu o nazwie ./src/misc (jeśli taki istnieje). Aby zignorować całe drzewo katalogu, zamiast sprawdzać każdy plik w drzewie, należy użyć -prune. Proszę zauważyć, że test dopasowuje wzorzec do całej nazwy pliku, poczynając od punktu początkowego, podanego w wierszu polecenie. Jeśli punkt startowy jest ścieżką absolutną, sens ma zastosowanie również wyłącznie ścieżki absolutnej. Oznacza to, że poniższe polecenie nigdy niczego nie dopasuje.
    find bar -path /foo/bar/myfile -print
    Find porównuje argument -path z przyciętą nazwą katalogu oraz nazwą bazową pliku, który jest sprawdzany. Jako że przycięta nazwa katalogu nigdy nie będzie kończyła się ukośnikiem, argumenty -path kończące się ukośnikiem niczego nie dopasują (może za wyjątkiem punktu początkowego podanego w wierszu polecenia). Wskazanie -path jest również obsługiwane find HP-UX i jest częścią standardu POSIX 2008.

-perm prawa
    Bity praw pliku są dokładnie takie, jak prawa (w formie ósemkowej lub symbolicznej). Ponieważ wymagane jest dokładne dopasowanie, stosowanie tej formuły w postaci symbolicznej wymaga podania dość skomplikowanego łańcucha praw. Na przykład "-perm g=w" dopasuje jedynie pliki o trybie 0020 (tj. te, których prawo zapisu dla grupy jest jedynym ustawionych uprawnieniem). Prawdopodobnie w takim przypadku lepsze jest użycie form "/" lub "-", np. "-perm -g=w", które dopasowuje każdy plik z prawem zapisu dla grupy. Lepsze przykłady podano w rozdziale PRZYKŁADY.

-perm -prawa
    Wszystkie bity praw pliku są ustawione dla pliku. Akceptowane są tryby w postaci symbolicznej i jest to zwykle wygodniejsza forma do użycia. W przypadku korzystania z postaci symbolicznej trzeba podać "u", "g" lub "o". Lepsze przykłady podano w rozdziale PRZYKŁADY.

-perm /prawa
    Ustawiony jest dowolny z bitów praw pliku. Akceptowane są tryby w postaci symbolicznej. W przypadku korzystania z postaci symbolicznej trzeba podać "u", "g" lub "o". Lepsze przykłady podano w rozdziale PRZYKŁADY. Jeśli nie ustawiono bitów praw w trybie, to test dopasuje każdy plik (zgodnie z zamysłem, aby pozostać w zgodzie z zachowaniem -perm -000).

-perm +prawa
    Nie jest już obsługiwane (a było przestarzałe od 2005 roku). Proszę użyć w zamian -perm /tryb.

-readable
    Dopasowuje pliki odczytywalne przez bieżącego użytkownika. Bierze się tu pod uwagę listy kontroli dostępu (ACL) i inne sprawy związane z uprawnieniami, które -perm ignoruje. Ten test używa wywołania systemowego access(2) i może być zmylony przez serwery NFS używające mapowania UID (lub root-squashing), gdyż wiele systemów implementuje access(2) w jądrze klienta i nie może użyć informacji mapowania UID po stronie serwera.

-regex wzorzec
    Nazwa pliku odpowiada wyrażeniu regularnemu wzorzec. Dopasowanie stosuje się do całej ścieżki, nie dla przeszukiwanej. Na przykład, aby dopasować plik o nazwie ./fubar3, można użyć wyrażenia regularnego ".*bar" lub ".*b.*3", lecz nie "f.*r3". Wyrażenia regularne rozumiane przez find są domyślnie wyrażeniami regularnymi Emacsa, lecz można to zmienić opcją -regextype.

-samefile nazwa
    Plik odnosi się do tego samego i-węzła co nazwa. Gdy działa opcja -L, obejmuje to dowiązania symboliczne.

-size n[c|w|b|k|M|G]
    Plik używa mniej niż, więcej niż lub dokładnie n jednostek miejsca, zaokrąglając w górę. Można dodać następujące przyrostki:

    b   bloki 512-bajtowe (wartość domyślna, gdy nie użyto przyrostka)

    c   bajty

    w   słowa dwubajtowe

    k   kibibajty (KiB, jednostka 1024 bajtów)

    M   mebibajty (MiB, jednostka 1024 * 1024 = 1048576 bajtów)

    G   gibibajty (GiB, jednostka 1024 * 1024 * 1024 = 1073741824 bajtów)

    Rozmiar jest członem st_size struktury stat wypełnionym przez wywołanie systemowe lstat (lub stat), zaokrąglonym jak pokazano wyżej. Innymi słowy, jest on zgodny z wartościami podawanymi przez ls -l. Proszę pamiętać, że określenia formatu "%k" i "%b" akcji -printf obsługują pliki rzadkie w inny sposób. Przyrostek "b" oznacza zawsze bloki 512-bajtowe, a nigdy nie 1024-bajtowe, co różni się od zachowania -ls.

    Przedrostki + i - oznaczają odpowiednio, większy i mniejszy, wedle zwykłych reguł tj. gdy dokładny rozmiar n jednostek nie jest sobie równy. Proszę pamiętać, że rozmiar jest zaokrąglany w górę do następnej jednostki. Z tego względu -size -1M nie jest równoważne -size -1048576c. Pierwszy dopasuje tylko puste pliki, a drugi dopasuje pliki od 0 do 1 048 575 bajtów.

-true
    Zawsze prawda.

-type c
    Plik jest typu c:

    b   blokowy (buforowany) plik specjalny

    c   znakowy (niebuforowany) plik specjalny (ang. character)

    d   katalog (ang. directory)

    p   potok nazwany (FIFO)

    f   zwykły plik

    l   dowiązanie symboliczne (link); nigdy nie jest to prawda, gdy działa opcja -L lub -foolow, chyba że dowiązanie jest zerwane. Aby wyszukiwać dowiązania symboliczne przy korzystaniu z opcji -L, należy użyć -xtype.

    s   gniazdo

    D   door (Solaris)

    Aby odszukać jednocześnie więcej niż jeden typ, można podać listę liter rozdzielonych przecinkiem "," (rozszerzenie GNU).

-uid n
    Numeryczny UID pliku wynosi mniej niż, więcej niż lub dokładnie n.

-used n
    Do pliku ostatnio dostano się wcześniej niż, dawniej niż lub dokładnie n dni po zmianie jego statusu.

-user unazwa
    Właścicielem pliku jest użytkownik unazwa (numeryczny UID jest tu dozwolony).

-wholename wzorzec
    Patrz -path. Ta alternatywa jest mniej przenośna niż wspomniana opcja.

-writable
    Dopasowuje pliki zapisywalne dla bieżącego użytkownika. Bierze pod uwagę listy kontroli dostępu (ACL) i inne zasady praw dostępu, które są ignorowane przez test -perm. Ten test używa wywołania systemowego access(2) i może być zmylony przez serwery NFS używające mapowania UID (lub root-squashing), gdyż wiele systemów implementuje access(2) w jądrze klienta i nie może użyć informacji mapowania UID po stronie serwera.

-xtype c
    Jest to to samo co -type, chyba że plik jest dowiązaniem symbolicznym. Dla dowiązań symbolicznych: jeśli podano -H lub -P, jest prawdziwe gdy plik jest dowiązaniem do pliku typu c; jeśli podano -L, jest prawdziwe, jeśli c to "l". Innymi słowy, dla dowiązań symbolicznych -xtype sprawdza typ pliku, którego nie sprawdza -type. Jeśli dowiązanie symboliczne jest zerwane (ponieważ rzecz, na którą wskazuje, nie istnieje albo dowiązanie wskazuje samo na siebie), to -xtype zachowuje się tak samo jak -type.

-context wzorzec
    (tylko SELinux) Kontekst bezpieczeństwa pliku dopasowanego przez wzorzec typu glob.

  AKCJE

-delete
    Usuwa pliki lub katalogi; prawdziwe gdy usunięcie powiedzie się. Jeśli nie, to wypisywany jest błąd, a kod zakończenia find będzie niezerowy (gdy program ostatecznie się zakończy).

    Ostrzeżenie: Proszę nie zapominać, że find analizuje wiersz polecenia jako wyrażenie, zatem umieszczenie -delete jako pierwszego będzie znaczyło, że find spróbuje usunąć wszystko poniżej podanych punktów początkowych.

    Skorzystanie z akcji -delete w wierszu polecenia automatycznie włącza opcję -depth. Jako że -depth z kolei powoduje, że -prune jest nieskuteczne, akcji -delete nie da się w praktyce połączyć z -prune.

    Często użytkownik może chcieć przetestować wiersz polecenia find za pomocą akcji -print, przed dodaniem -delete do faktycznego przebiegu kasowania. Aby uniknąć zaskakujących wyników, zwykle należy pamiętać, aby podać -depth w tych wcześniejszych przebiegach testowych.

    Usunięcie katalogu przez akcję -delete nie powiedzie się, chyba że będzie on pusty.

    Razem z opcją -ignore_readdir_race find zignoruje błędy akcji -delete w przypadku, gdy plik zniknie od momentu odczytania katalogu macierzystego: program nie wypisze żadnego błędu, nie zmieni kodu zakończenia na niezerowy, a zwracanym kodem akcji -delete będzie prawda.

-exec polecenie ;
    Wykonuje polecenie; prawdziwe jeśli zwrócony został status 0. Wszelkie następne argumenty find są brane za argumenty polecenia, aż nie zostanie napotkany argument, składający się z ";". Łańcuch "{}' jest podmieniany na obecnie przetwarzaną nazwę pliku, wszędzie, gdzie wystąpi ona w wierszu polecenia, nie tylko w argumentach, gdzie jest ona sama, jak w niektórych wersjach find. Obydwie te konstrukcje być może będą wymagały zacytowania (znakiem "\") aby uchronić je przed rozwinięciem przez powłokę. Więcej informacji na temat użycia opcji -exec, zawiera rozdział PRZYKŁADY. Polecenie jest wykonywane w katalogu startowym. W związku z akcją -exec występują pewne nieuniknione zagrożenia związane z bezpieczeństwem, należy zamiast niej używać -execdir.

-exec polecenie {} +
    Ten wariant akcji -exec, wykonuje podane polecenie na wybranych plikach, lecz wiersz polecenia jest budowany przez dodawanie każdej wybranej nazwy pliku na końcu - całkowita liczba wywołań polecenia będzie znacznie mniejsza, niż liczba dopasowanych plików. Wiersz polecenia jest budowany w ten sam sposób, w jaki xargs buduje swój. W poleceniu dozwolone jest wystąpienie jedynie jednych nawiasów "{}" i musi ono wystąpić na końcu, zaraz przed "+"; trzeba je też poprzedzić znakiem "\" lub zacytować, aby ochronić przed interpretacją przez powłokę. Polecenie jest wykonywane w katalogu początkowym. Jeśli którekolwiek z wywołań w postaci "+" zwróci niezerową wartość jako status zakończenia, find zwróci niezerowy status zakończenia. Jeśli find napotka na błąd, może on czasem spowodować natychmiastowe wyjście, zatem niektóre oczekujące polecenia mogą się wcale nie uruchomić. Z tego powodu -exec moje-polecenie ... {} + -quit może nie spowodować faktycznego wykonania mojego-polecenia. Ten wariant -exec zawsze zwraca prawdę.

-execdir polecenie ;

-execdir polecenie {} +
    Podobnie jak -exec, lecz podane polecenie jest uruchamiane z podkatalogu zawierającego dopasowany plik, który nie jest zwykle tożsamy z katalogiem, w którym uruchomiono find. Podobnie jak przy -exec, trzeba zacytować {}, jeśli find jest wywoływany z powłoki. Jest to o wiele bezpieczniejsza metoda wywoływania poleceń, ponieważ zapobiega wyścigowi przy rozwiązywaniu ścieżek do dopasowanych plików. Podobnie jak przy akcji -exec, postać z "+" -execdir zbuduje wiersz poleceń aby przetworzyć więcej niż jeden dopasowany plik, lecz każde dane wywołanie polecenia wypisze jedynie pliki, które istnieją w tym samym podkatalogu. Przy używaniu tej opcji, trzeba się upewnić, że zmienna środowiskowa $PATH nie odnosi się do "." - w takim wypadku atakujący mógłby uruchomić dowolne polecenie, przez pozostawienie pliku o odpowiedniej nazwie w katalogu, w którym zostanie uruchomione -execdir. To samo tyczy się wpisów w $PATH, które są puste lub nie są bezwzględną nazwą katalogu. Jeśli którekolwiek z wywołań w postaci "+" zwróci niezerową wartość jako status zakończenia, find zwróci niezerowy status zakończenia. Jeśli find napotka na błąd, może on czasem spowodować natychmiastowe wyjście, zatem niektóre oczekujące polecenia mogą się wcale nie uruchomić. Wynik akcji zależy od tego, czy użyto wariantu + czy ;, bowiem -execdir polecenie {} + zawsze zwróci prawdę, natomiast -execdir polecenie {} ; zwróci prawdę tylko, jeśli polecenie zwróci 0.

-fls plik
    Prawda; podobne do -ls, lecz zapisuje do pliku jak -fprint. Plik wyjściowy jest tworzony zawsze, nawet jeśli wskazanie nigdy nie pasuje. W rozdziale NIETYPOWE NAZWY PLIKÓW znajdują się informacje nt. obsługi nietypowych nazw plików.

-fprint plik
    Prawdziwe; wypisuje pełną nazwę pliku do pliku. Jeśli plik nie istnieje w czasie działania find, zostanie utworzony; jeśli istnieje, zostanie obcięty. Nazwy plików /dev/stdout i /dev/stderr są traktowane osobno; odnoszą się one odpowiednio do standardowego wyjścia i standardowego wyjścia błędów. Plik wyjściowy jest tworzony zawsze, nawet jeśli wskazanie nigdy nie pasuje. W rozdziale NIETYPOWE NAZWY PLIKÓW znajdują się informacje nt. obsługi nietypowych nazw plików.

-fprint0 plik
    Prawda; podobne do -print0, lecz zapisuje do pliku jak -fprint. Plik wyjściowy jest tworzony zawsze, nawet jeśli wskazanie nigdy nie pasuje. W rozdziale NIETYPOWE NAZWY PLIKÓW znajdują się informacje nt. obsługi nietypowych nazw plików.

-fprintf plik format
    Prawda; podobne do -printf, lecz zapisuje do pliku jak -fprint. Plik wyjściowy jest tworzony zawsze, nawet jeśli wskazanie nigdy nie pasuje. W rozdziale NIETYPOWE NAZWY PLIKÓW znajdują się informacje nt. obsługi nietypowych nazw plików.

-ls Prawdziwe; wypisuje plik bieżący w formacie ls -dils na standardowe wyjście. Liczniki bloków są 1K blokami, chyba że ustawiono zmienną środowiskową POSIXLY_CORRECT, gdy używane będą 512-bajtowe bloki. W rozdziale NIETYPOWE NAZWY PLIKÓW znajdują się informacje nt. obsługi nietypowych nazw plików.

-ok polecenie ;
    Jak -exec, lecz najpierw pyta użytkownika. Jeśli się on zgodzi - uruchamia polecenie. W przeciwnym wypadku jedynie zwraca fałsz. Gdy polecenie jest uruchomione, standardowe wejście jest przekierowane z /dev/null. Akcji nie można podać równocześnie z opcją -files0-from.

    Odpowiedź na pytanie jest dopasowywane do pary wyrażeń regularnych, aby określić, czy jest pozytywna czy negatywna. Wyrażenie to jest pozyskiwane z systemu, jeśli ustawiona jest zmienna środowiskowa POSIXLY_CORRECT, a w przeciwnym wypadku - z katalogu tłumaczeń komunikatów find. Jeśli system nie posiada odpowiednich definicji, użyta będzie własna definicja finda. W każdym przypadku, interpretacja wyrażenia regularnego będzie zależała od zmiennej środowiskowej LC_CTYPE (klasy znakowe) i LC_COLLATE (przedziały znaków i klasy równoważności).

-okdir polecenie ;
    Jak -execdir, lecz najpierw wyświetlane jest pytanie, podobnie jak przy -ok. Jeśli użytkownik nie zgodzi się, zwraca jedynie fałsz. Gdy polecenie jest uruchomione, jego standardowe wejście jest przekierowane z /dev/null. Akcji tej nie można łączyć z opcją -files0-from.

-print
    Prawdziwe; wypisuje pełną nazwę pliku na standardowe wyjście razem ze znakiem nowego wiersza. Jeśli wyjście finda jest przekierowane za pomocą potoku do innego programu i istnieje choć najmniejsza możliwość, że nazwa jednego z przeszukiwanych plików może zawierać znak nowego wiersza, należy się poważnie zastanowić, czy lepszym wyjściem nie będzie skorzystanie z opcji -print0, zamiast -print. Rozdział NIETYPOWE NAZWY PLIKÓW zawiera informacje nt. obsługi nietypowych znaków.

-print0
    Prawdziwe; wypisuje pełną nazwę pliku na standardowe wyjście. Za nazwą daje znak null (zamiast znaku nowego wiersza używanego przez -print. Umożliwia to poprawne wyświetlenie plików, zawierających w nazwach znaki nowej linii w programach, przetwarzających wyjście finda. Opcja ta odpowiada opcji -0 programu xargs.

-printf format
    Prawdziwe; wypisuje format na standardowe wyjście, interpretując sekwencje specjalne "\" i dyrektywy "%". Szerokości pól i precyzje mogą być podawane dokładnie jak w funkcji printf(3) z C. Proszę zauważyć, że wiele z pól jest wypisywanych jako %s, a nie jako %d - może to oznaczać, że flagi nie będą działać zgodnie z oczekiwaniami. Oznacza to również, że flaga "-" działa (wymusza wyrównanie do lewej pól). W przeciwieństwie do -print, -printf nie dodaje znaku nowego wiersza do końca łańcucha. Sekwencje specjalne i dyrektywy to:

    \a  Dzwonek.

    \b  Backspace.

    \c  Wstrzymuje wypisywanie tego formatu i natychmiast wymiata wyjście.

    \f  Wysuw wiersza.

    \n  Nowy wiersz.

    \r  Powrót karetki.

    \t  Tabulacja pozioma.

    \v  Tabulacja pionowa.

    \0  ASCII NUL.

    \\  Literalny lewy ukośnik ("\").

    \NNN
        Znak o kodzie ASCII NNN (ósemkowo).

    "\", za którym następuje dowolny inny znak, jest traktowany jak zwykły znak, więc są wypisywane obydwa.

    %%  Literalny znak procenta.

    %a  Ostatni czas dostępu do pliku w formacie zwracanym przez funkcję ctime(3) C.

    %Ak Ostatni czas dostępu do pliku, w formacie określonym przez k, którym może być "@", lub dyrektywa dla funkcji C strftime(3). Niepełną listę możliwych wartości k wymieniono niżej. W dokumentacji strftime(3) zamieszczono pełną listę. Niektóre ze znaków określających konwersję mogą nie być dostępne na wszystkich systemach z powodu różnic w implementacji funkcji bibliotecznej strftime(3).

        @   Sekundy od 1 stycznia, 1970, 00:00 GMT, z częścią ułamkową.

        Pola czasowe:

        H   godzina (00..23)

        I   godzina (01..12)

        k   godzina ( 0..23)

        l   godzina ( 1..12)

        M   minuta (00..59)

        p   przetłumaczone AM lub PM

        r   czas, 12-godzinny (gg:mm:ss)

        S   Sekundy (00.00 .. 61.00). Jest tu część ułamkowa.

        T   czas, 24-godzinny (gg:mm:ss.xxxxxxxxxx)

        +   Data i czas, oddzielona "+" np "2004-04-28+22:22:05.0". Jest to rozszerzenie GNU. Czas jest podany w bieżącej strefie czasowej (na którą wpływ może mieć ustawiona zmienna środowiskowa TZ). Pole sekundowe zawiera część ułamkową.

        X   lokalna reprezentacja czasu (G:M:S). Drugie pole zawiera część ułamkową.

        Z   strefa czasowa (np. EDT), lub nic jeśli nie da się jej określić

        Pola daty:

        a   lokalny skrót nazwy tygodnia (nie..sob)

        A   lokalna pełna nazwa tygodnia, zmiennej długości (niedziela..sobota)

        b   lokalna skrócona nazwa miesiąca (sty..gru)

        B   lokalna pełna nazwa miesiąca, zmiennej długości (styczeń..grudzień)

        c   data i czas zgodnie z ustawieniami regionalnymi (sob, 4 lis 1989, 12:02:33). Format ten jest taki sam w przypadku ctime(3) i w celu zachowania z nim kompatybilności, nie ma tu części ułamkowej w polu sekund.

        d   dzień miesiąca (01..31)

        D   data (mm/dd/rr)

        F   data (rrrr-mm-dd)

        h   to samo co b

        j   dzień roku (001..366)

        m   miesiąc (01..12)

        U   numer tygodnia w roku, z niedzielą liczoną jako pierwszy dzień tygodnia (00..53)

        w   dzień tygodnia (0..6)

        W   numer tygodnia w roku, licząc z poniedziałkiem, jako pierwszym dniem tygodnia (00..53)

        x   lokalna reprezentacja daty (mm.dd.rrrr)

        y   ostatnie dwie cyfry roku (00..99)

        Y   rok (1970...)

    %b  Wielkość przestrzeni dysku, użyta dla tego pliku w blokach 512-bajtowych. Ponieważ przestrzeń dyskowa jest alokowana w wielokrotnościach rozmiaru bloku systemu plików, jest to zwykle więcej niż %s/512, lecz może być to również mniej, gdy plik jest tzw. plikiem rzadkim.

    %Bk Czas utworzenia pliku (ang. birth time), w formacie określonym przez k, który jest taki sam jak dla %A. Ta dyrektywa daje łańcuch pusty, jeśli dany system operacyjny lub system plików nie obsługują czasów utworzenia pliku.

    %c  Ostatni czas zmiany statusu pliku, w formacie zwróconym przez funkcję ctime(3) z C.

    %Ck Ostatni czas zmiany statusu pliku w formacie określonym przez k, w taki sam sposób, jak dla %A.

    %d  Głębokość pliku w drzewie katalogowym; 0 oznacza plik będący punktem startowym.

    %D  Numer urządzenia, na którym istnieje plik (pole st_dev ze stat struct), dziesiętnie.

    %f  Wypisuje nazwę bazową (ang. basename); nazwę pliku po usunięciu katalogów (pozostawiono ostatni element). W przypadku /, wynikiem jest "/". Przykład pokazano w rozdziale PRZYKŁADY.

    %F  Rodzaj systemu plików, na którym znajduje się plik; wartość ta może być używana do -fstype.

    %g  Nazwa grupy pliku lub numeryczny GID, jeśli grupa nie ma nazwy.

    %G  Numeryczny GID pliku.

    %h  Nazwa katalogu; początkowe katalogi z nazwy pliku (wszystkie, poza ostatnim elementem). Jeśli nazwa pliku nie zawiera ukośników (ponieważ jest to katalog bieżący), to %h daje ".". W przypadku plików, które same są katalogi i zawierają ukośnik (w tym /), %h rozwija się do łańcucha pustego. Przykład pokazano w rozdziale PRZYKŁADY.

    %H  Punkt początkowy, pod którym plik został znaleziony.

    %i  Numer i-węzła pliku (dziesiętnie).

    %k  Wielkość przestrzeni dysku, użyta dla tego pliku w blokach o wielkości 1K bajtów. Ponieważ przestrzeń dyskowa jest alokowana w wielokrotnościach rozmiaru bloku systemu plików, jest to zwykle więcej niż %s/1024, lecz może być to również mniej, gdy plik jest tzw. plikiem rzadkim.

    %l  Obiekt dowiązania symbolicznego (pusty łańcuch, jeśli plik nie jest dowiązaniem symbolicznym).

    %m  Bity praw pliku (ósemkowo). Ta opcja korzysta z "tradycyjnych" liczb, używanych przez większość implementacji Uniksowych, lecz jeśli dana, używana obecnie implementacja, wykorzystuje dziwną kolejność ósemkowych bitów uprawnień, widoczna będzie różnica pomiędzy prawami pliku i wynikiem %m. Zwykle chce się tu użyć początkowego zera i aby to zrobić należy skorzystać z flagi # (np. "%#m")

    %M  Uprawnienia pliku (w postaci symbolicznej, jak w ls). Ta dyrektywa jest obsługiwana przez findutils 4.2.5 i późniejsze.

    %n  Liczba twardych dowiązań do pliku.

    %p  Nazwa pliku.

    %P  Nazwa pliku z usuniętą nazwą punktu początkowego, dla którego ją znaleziono.

    %s  Rozmiar pliku w bajtach.

    %S  Rzadkość (dziurawość) pliku. Jest obliczana jako (ROZMIARBLOKU*st_blocks / st_size). Dokładna wartość, jaką uzyska się dla danego zwykłego pliku o określonej wielkości, jest zależna od systemu. Jednak pliki rzadkie będą miały tę wartość zwykle mniejszą niż 1.0, a pliki używające bloków pośrednich mogą mieć wartość większą niż 1.0. Liczba bloków użytych przez plik zwykle zależy od systemu plików. Wartość użyta dla ROZMIARBLOKU zależy od systemu, lecz najczęściej jest to 512. Jeśli rozmiar bloku wynosi zero, wypisywana wartość jest niezdefiniowana. W systemach nieobsługujących st_blocks, rzadkość pliku przyjmuje się na 1.0.

    %t  Ostatni czas modyfikacji pliku w formacie zwróconym przez funkcję ctime(3) z C.

    %Tk Ostatni czas modyfikacji pliku, w formacie określonym przez k, podobnie jak dla %A.

    %u  Nazwa użytkownika pliku, lub numeryczny UID, jeśli użytkownik nie ma nazwy.

    %U  Numeryczny UID pliku.

    %y  Typ pliku (podobnie jak w ls -l), "U" to typ nieznany (ang. unknown, nie powinien wystąpić).

    %Y  Typ pliku (jak %y), lecz podąża za dowiązaniami symbolicznymi: "L" to pętla (ang. loop), "N" oznacza nieistniejący, natomiast "?" wystąpi dla każdego innego błędu przy określaniu typu celu dowiązania symbolicznego.

    %Z  (tylko SELinux) kontekst bezpieczeństwa pliku.

    %{ %[ %(
        Zarezerwowane na przyszłość.

    Znak "%" po którym występuje dowolny inny znak jest ignorowany, lecz ten drugi znak jest wypisywany (nie należy na tym polegać, gdyż mogą zostać wprowadzone nowe znaki formatu). Symbol "%" na końcu argumentu formatu skutkuje niezdefiniowanym zachowaniem, ponieważ brak jest następnego znaku. W niektórych ustawieniach regionalnych opcja ta może ukryć klucz do domu, w innych usunąć ostatnią stronicę czytanej powieści. Ostrzegaliśmy!

    Dyrektywy %m i %d obsługują flagi #, 0 i +, lecz inne dyrektywy nie, nawet jeśli wyświetlają liczby. Do dyrektyw liczbowych, które nie obsługują tych flag, należą G, U, b, D, k i n. Flaga formatu "-" jest obsługiwana i zmienia wyrównanie pól z prawego (domyślnego) na lewy.

    Rozdział NIETYPOWE NAZWY PLIKÓW zawiera informacje nt. obsługi nietypowych nazw plików.

-prune
    Prawda; jeśli plik jest katalogiem, nie zagłębia się w niego. Jeśli poda się -depth, to -prune nie działa. Ponieważ -delete wymusza -depth, nie da się sensownie połączyć -prune i -delete. Na przykład, aby pominąć katalog src/emacs i wszystkie jego pliki i katalogi oraz wypisać nazwy innych znalezionych plików, proszę użyć:
    find . -path ./src/emacs -prune -o -print

-quit
    Natychmiast wychodzi (zwracając wartość zero, jeśli nie wystąpiły błędy). Różni się to od -prune ponieważ -prune stosuje się tylko do zawartości przyciętych katalogów, natomiast -quit po prostu od razu zatrzymuje find. Nie pozostaną żadne działające procesy potomne. Przed wyjściem programu, zostaną przywołane wiersze polecenia zbudowane za pomocą -exec ... + lub -execdir ... +. Po wykonaniu -quit, dalsze pliki podane w wierszu polecenia nie zostaną przetworzone. Na przykład "find /tmp/foo /tmp/bar -print -quit" wypisze tylko "/tmp/foo".
    Częstym zastosowaniem -quit jest zatrzymanie przeszukiwania systemu plików po odnalezieniu tego, czego szukano. Na przykład, aby znaleźć pojedynczy plik, można podać:
    find / -name needle -print -quit

  OPERATORY
Wymienione według malejącego priorytetu:

( wyraż )
    Wymusza pierwszeństwo. Ponieważ nawiasy są znakami specjalnymi dla powłoki, trzeba je zwykle cytować. Wiele przykładów z niniejszej strony podręcznika używa do tego celu odwrotnych ukośników: "\(...\)" zamiast "(...)".

! wyraż
    Prawda, jeśli wyraż jest fałszywe. Znak ten zwykle wymaga również ochrony przed interpretacją przez powłokę.

-not wyraż
    Jak ! wyraż, lecz nie jest zgodne z POSIX.

wyraż1 wyraż2
    Dwa wyrażenia z rzędu są traktowane, jakby były połączone jawnym -a; wyraż2 nie jest analizowany jeśli wyraż1 jest fałszywe.

wyraż1 -a wyraż2
    To samo, co wyraż1 wyraż2.

wyraż1 -and wyraż2
    To samo, co wyraż1 wyraż2, lecz nie jest zgodne z POSIX.

wyraż1 -o wyraż2
    Lub ("or"); wyraż2 nie jest analizowane jeśli wyraż1 jest prawdziwe.

wyraż1 -or wyraż2
    To samo, co wyraż1 -o wyraż2, lecz nie jest zgodne z POSIX.

wyraż1 , wyraż2
    Lista; zarówno wyraż1 jak i wyraż2 są zawsze analizowane. Wartość wyraż1 jest pomijana; wartością listy jest wartość wyraż2. Operator w formie przecinka może być przydatny do wyszukiwania wielu różnych typów rzeczy, lecz przechodząc przez hierarchię systemu plików tylko raz. Do wypisania różnych dopasowań do wielu różnych plików wyjściowych, można użyć akcji -fprintf.

Proszę zauważyć, że gdy -a zostanie podane niejawnie (np. przy dwóch testach bez określonego jawnie operatora między nimi) lub jawnie, ma pierwszeństwo nad -o. Oznacza to, że find . -name plik-a -o -name plik-b -print nigdy nie wypisze plik-a.

NIETYPOWE NAZWY PLIKÓW
Wiele akcji find skutkuje wypisywaniem danych, będących pod kontrolą innych użytkowników. Dotyczy to nazw plików, rozmiarów, czasów modyfikacji itp. Nazwy plików są potencjalnym problemem, ponieważ mogą zawierać dowolne znaki oprócz "\0" i "/". Nietypowe znaki w nazwach plików mogą robić nieoczekiwane i często nieprzewidywalne rzeczy z terminalem użytkownika (np. zmieniać ustawienia klawiszy funkcyjnych niektórych terminali). Nietypowe znaki są obsługiwane w różny sposób, w zależności od akcji, zgodnie z poniższym opisem.

-print0, -fprint0
    Zawsze wypisuje dokładne nazwy plików, niezmienione, nawet jeśli wynik trafia na terminal

-ls, -fls
    Nietypowe znaki są zawsze cytowane. Białe znaki, odwrotny ukośnik i znak podwójnego cudzysłowu jest wypisywany za pomocą cytowania w stylu C (np \f lub \" ). Inne nietypowe znaki są wypisywane za pomocą cytowania ósemkowego. Inne znaki drukowalne (dla -ls i -fls są to znaki pomiędzy ósemkowym 041 i 0176) są wypisywane bez zmian.

-printf, -fprintf
    Jeśli wynik nie trafia na terminal, nic nie jest zmieniane. W przeciwnym razie, wynik zależy od używanej dyrektywy. Dyrektywy %D, %F, %g, %G, %H, %Y i %y są rozwijane do wartości, które nie są pod kontrolą właścicieli plików, są więc wypisywane bez zmian. Dyrektywy %a, %b, %c, %d, %i, %k, %m, %M, %n, %s, %t, %u i %U mają wartości będące pod kontrolą właścicieli plików, lecz nie mogą być one użyte do wysłania dowolnych danych na terminal, dlatego są wypisywane bez zmian. Dyrektywy %f, %h, %l, %p i %P są cytowane. Cytowanie jest wykonywane w ten sam sposób, jak w GNU ls. Nie jest to ten sam mechanizm, co używany przez -ls i -fls. Jeśli można zdecydować o formacie wyniku find lepiej jest zwykle skorzystać z "\0" jako ogranicznika, zamiast używać znaku nowego wiersza, ponieważ nazwy plików mogą zawierać białe znaki i znaki nowego wiersza. Ustawienie zmiennej środowiskowej LC_CTYPE jest używane do określenia tego, które znaki mają być cytowane.

-print, -fprint
    Cytowanie jest obsługiwane w ten sam sposób co w -printf i -fprintf. Jeśli używa się find w skrypcie lub w sytuacji, gdzie dopasowywane pliki mogą mieć dowolne nazwy, powinno się rozważyć skorzystanie z -print0 zamiast z -print.

Akcje -ok i -okdir wypisują bieżące nazwy plików bez zmian. Może się to zmienić w kolejnych wydaniach.

ZGODNOŚĆ ZE STANDARDAMI
W celu najściślejszej zgodności ze standardem POSIX, należy ustawić zmienną środowiskową POSIXLY_CORRECT. W standardzie POSIX (IEEE Std 1003.1-2008, 2016 Edition) określono następujące opcje:

-H  Opcja jest obsługiwana.

-L  Opcja jest obsługiwana.

-name
    Opcja jest obsługiwana, lecz zgodność z POSIX zależy od zgodności z POSIX systemowej funkcji bibliotecznej fnmatch(3). Od wersji findutils-4.2.2 metaznaki powłoki (np. "*", "?", "[]") dopasują początkowe ".", ponieważ wymaga tego interpretacja 126 IEEE PASC. Jest to zmiana w stosunku do poprzednich wersji findutils.

-type
    Obsługiwane. POSIX określa "b", "c", "d", "l", "p", "f" i "s". GNU find obsługuje również "D", reprezentujące Door, w systemach, które to obsługują. Co więcej, GNU find umożliwia jednoczesne podanie wielu typów w liście rozdzielonej przecinkiem.

-ok Obsługiwane. Interpretacja odpowiedzi jest zgodna z wzorcami "yes" i "no" wybranymi przez ustawienie zmiennej środowiskowej LC_MESSAGES. Gdy ustawiona jest zmienna środowiskowa POSIXLY_CORRECT, wzorce te są wzięte z systemowych definicji odpowiedzi pozytywnej (yes) lub negatywnej (no). Proszę zapoznać się z systemową dokumentacją nl_langinfo(3), w szczególności YESEXPR i NOEXPR. Gdy POSIXLY_CORRECT nie jest ustawiona, wzorce są brane z własnego katalogu komunikatów find.

-newer
    Obsługiwane. Jeśli podany plik jest dowiązaniem symbolicznym, jest zawsze rozwiązywany. Jest to zmiana w stosunku do wcześniejszego zachowania, gdy odpowiedni czas był brany z samego dowiązania; patrz poniższy rozdział HISTORIA.

-perm
    Obsługiwane. Jeśli zmienna środowiskowa POSIXLY_CORRECT nie jest ustawiona, część argumentów trybu (np. +a+x), która nie jest prawidłowa w POSIX, jest obsługiwana w celu zachowania kompatybilności wstecznej.

Inne wskazania
    Wszystkie wskazania: -atime, -ctime, -depth, -exec, -group, -links, -mtime, -nogroup, -nouser, -ok, -path, -print, -prune, -size, -user i -xdev są obsługiwane.

Standard POSIX określa nawiasy "(", ")", negację "!" i operatory logiczne ORAZ/LUB -a i -o.

Wszystkie inne opcje, wskazania, wyrażenia itd. są rozszerzeniami wykraczającymi poza standard POSIX. Wiele z nich nie jest jednak unikalnych dla GNU find.

Standard POSIX wymaga wykrywania przez find pętli:

    Narzędzie find powinno wykrywać pętle nieskończone, tj. gdy wchodzi do wcześniej odwiedzonego katalogu, będącego przodkiem pliku, który wystąpił jako ostatni. Gdy pętla nieskończona jest wykrywana, find powinien wypisać informację diagnostyczną na standardowe wyjście błędów i powinien albo odzyskać swą pozycję w hierarchii albo wyjść.

GNU find jest zgodny z tymi wymaganiami. Liczba dowiązań katalogów zawierających wpisy będące dowiązaniami zwykłymi (twardymi) do katalogu nadrzędnego będzie często niższa, niż powinna być. Oznacza to, że GNU find czasami zoptymalizuje liczbę sprawdzeń podkatalogów będących dowiązaniem do katalogu nadrzędnego. Ponieważ find nie wchodzi w rzeczywistości do każdego podkatalogu, może unikać wyświetlania komunikatu diagnostycznego. Choć to zachowanie może być niekiedy mylące, jest mało prawdopodobne, aby ktokolwiek na nim polegał. Jeśli optymalizacja "liściowa" (ang. leaf optimisation) zostanie wyłączona za pomocą -noleaf, wpis katalogu zostanie zawsze sprawdzony, a gdy to będzie konieczne, zostanie wypisany komunikat diagnostyczny. Dowiązanie symboliczne nie może być użyte do tworzenia podobnych cykli systemu plików, lecz jeśli działa opcja -L lub -follow, komunikat diagnostyczny zostanie wypisany, gdy find natrafi na pętlę dowiązań symbolicznych. Podobnie jak w przypadku pętli z dowiązaniami zwykłymi (twardymi), optymalizacja liściowa często będzie oznaczać, że find wie, iż nie musi wywoływać stat() lub chdir() na dowiązaniu symbolicznym, więc taka diagnostyka często nie jest konieczna.

Opcja -d jest obsługiwana w celu kompatybilności z różnymi systemami BSD, lecz powinno się w zamian używać zgodną z POSIX opcję -depth.

Zmienna środowiskowa POSIXLY_CORRECT nie wpływa na zachowanie testów -regex ani -iregex, ponieważ opcje te nie są określone w standardzie POSIX.

ZMIENNE ŚRODOWISKOWE

LANG
    Dostarcza domyślną wartość do zmiennych dotyczących umiędzynarodowienia, które nie są ustawione lub są puste.

LC_ALL
    Jeśli jest ustawiona na niepusty łańcuch, przesłania wartość wszystkich innych zmiennych dotyczących umiędzynarodowienia.

LC_COLLATE
    Standard POSIX określa, że ta zmienna wpływa na dopasowanie wzorców używanych przez opcję -name. GNU find używa funkcji bibliotecznej fnmatch(3), w związku z tym obsługa LC_COLLATE zależy od biblioteki systemowej. Zmienna ta wpływa również na interpretację odpowiedzi na -ok - podczas gdy zmienna LC_MESSAGES wybiera rzeczywisty wzorzec używany do interpretacji odpowiedzi na -ok, interpretacja wyrażeń klamrowych we wzorcu będzie zależna od LC_COLLATE.

LC_CTYPE
    Zmienna wpływa na traktowanie klas znaków używanych w wyrażeniach regularnych, jak również w teście -name, jeśli obsługuje to systemowa funkcja biblioteczna fnmatch(3). Zmienna wpływa również na interpretację klas znakowych w wyrażeniach regularnych używanych do interpretacji odpowiedzi na pytanie wydane przez -ok. Zmienna środowiskowa LC_CTYPE wpływa również na to, które znaki są uważane za niedrukowalne przy wypisywaniu nazw plików; patrz rozdział NIETYPOWE NAZWY PLIKÓW.

LC_MESSAGES
    Określa język (lokale) komunikatów. Jeśli ustawiona jest zmienna środowiskowa POSIXLY_CORRECT, to określa również interpretację na odpowiedź na pytanie zadane przez akcję -ok.

NLSPATH
    Określa lokalizację katalogów z przetłumaczonymi komunikatami.

PATH
    Wpływa na katalogi, które są przeszukiwane przez find w celu wykonania plików wywołanych przez -exec, -execdir, -ok i -okdir.

POSIXLY_CORRECT
    Określa rozmiar bloku używany przez -ls i -fls. Jeśli ustawiona jest zmienna POSIXLY_CORRECT, bloki mają po 512 bajtów. W przeciwnym wypadku - 1024 bajtów.

    Ustawienie tej zmiennej domyślnie wyłącza również ostrzeżenia (tzn. implikuje -nowarn), ponieważ niezależnie od wyniku -ok, POSIX wymaga aby wszystkie komunikaty wypisywane na standardowe wyjście błędów były diagnostyczne i wynikał z nich niezerowy kod zakończenia.

    Gdy POSIXLY_CORRECT nie jest ustawiona, -perm +zzz jest traktowane jak -perm /zzz jeśli +zzz nie jest prawidłowym trybem symbolicznym. Gdy POSIXLY_CORRECT jest ustawiona, takie konstrukcje są traktowane jako błąd.

    Gdy POSIXLY_CORRECT jest ustawiona, odpowiedź na pytanie zadane przez akcję -ok jest interpretowane zgodnie z katalogiem systemowym wiadomości, a nie zgodnie z własnymi tłumaczeniami komunikatów programu find.

TZ  Wpływa na strefę czasową używaną przez część związanych z czasem dyrektyw formatu opcji -printf i -fprintf.

PRZYKŁADY

  Prostsze podejście "find|xargs"

•   Znajduje pliki o nazwie core w lub poniżej katalogu /tmp i usuwa je.

    $ find /tmp -name core -type f -print | xargs /bin/rm -f

    Proszę zauważyć, że przykład nie będzie działał poprawnie, jeśli w którejś z nazw są znaki nowego wiersza, pojedyncze lub podwójne cudzysłowy lub spacje.

  Bezpieczniejsze podejście "find -print0 | xargs -0"

•   Znajduje pliki o nazwie core w lub poniżej katalogu /tmp i usuwa je, przetwarzając nazwy plików w ten sposób, że nazwy zawierające pojedyncze lub podwójne cudzysłowy, spacji lub znaki nowego wiersza są obsługiwane poprawnie.

    $ find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f

    Test -name jest wykonywany przed testem -type, aby zapobiec wywoływaniu stat(2) na każdym pliku.

Proszę zauważyć, że pomiędzy momentem, gdy find przechodzi przez drzewo wypisując pasujące nazwy plików, a momentem, gdy proces wykonywany przez xargs pracuje z tym plikiem, wciąż występuje wyścig.

  Przetwarzanie dowolnych punktów początkowych

•   Zakładając, że inny program proggy filtruje wstępnie i tworzy dużą listę plików rozdzielonych znakiem NUL, przetwarza je na punkty początkowe i znajduje pośród nich wszystkie zwykłe, puste pliki:

    $ proggy | find -files0-from - -maxdepth 0 -type f -empty

    Użycie `-files0-from -` oznacza, że nazwy punktów początkowych są odczytywane ze standardowego wejście tj. z potoku; -maxdepth 0 zapewnia, że sprawdzane są tylko jawnie podane wpisy, bez zagłębiania się w katalogi (gdyby jeden z punktów początkowych takim był).

  Wykonywanie polecenia dla każdego pliku

•   Uruchamia file na każdym pliku w lub poniżej katalogu bieżącego.

    $ find . -type f -exec plik '{}' \;

    Proszę zwrócić uwagę, że nawiasy klamrowe są ujęte w pojedyncze cudzysłowy, aby ochronić je przed interpretację przez interpunkcję skryptów powłoki. Średnik jest również chroniony, przez odwrotny ukośnik, choć pojedyncze cudzysłowy byłyby równie dobre.

Ze względu na wydajność i bezpieczeństwo w wielu przypadkach preferowana może być składnia `-exec ... +` albo nawet lepiej `-execdir ... +`.

  Przechodzenie przez system plików jednokrotnie - wykonując 2 różne akcje

•   Przeszukuje system plików jeden raz, wypisując pliki i katalogi z set-user-ID do pliku /root/suid.txt, a duże pliki do /root/big.txt.

    $ find / \
    \( -perm -4000 -fprintf /root/suid.txt '%#m %u %p\n' \) , \
    \( -size +100M -fprintf /root/big.txt '%-10s %p\n' \)

    Przykład ten używa znaku kontynuacji wiersza "\" w pierwszych dwóch wierszach, by poinstruować powłokę, aby kontynuowała odczytywanie polecenia z następnego wiersza.

  Wyszukiwanie plików według wieku

•   Wyszukuje pliki w katalogu domowym użytkownika, które zostały zmodyfikowane w ciągu ostatnich 24 godzin.

    $ find $HOME -mtime 0

    To polecenie działa w ten sposób, ponieważ czas od ostatniej modyfikacji pliku jest podzielony przez 24 godziny, a reszta jest odrzucana. Oznacza to, że aby pasować do -mtime 0, plik musiał być zmodyfikowany mniej niż 24 godziny temu.

  Wyszukiwanie plików według uprawnień

•   Wyszukuje pliki wykonywalne, lecz nieodczytywalne.

    $ find /sbin /usr/sbin -executable \! -readable -print

•   Wyszukuje pliki posiadające prawa odczytu i zapisu dla właściciela i grupy, które dla innych są odczytywalne, lecz nie są zapisywalne.

    $ find . -perm 664

    Pliki, które spełniają te kryteria lecz mają ustawione inne bity praw (np. wykonywalności) nie są dopasowane.

•   Wyszukuje pliki posiadające prawa odczytu i zapisu dla właściciela i grupy, które dla innych są odczytywalne, bez względu na obecność jakichś dodatkowych bitów praw (np. bitu wykonywalności).

    $ find . -perm -664

    Dopasowany będzie też np. plik z trybem 0777.

•   Wyszukuje pliki, które są przez kogoś zapisywalne (dla ich właściciela, grupy lub innych).

    $ find . -perm /222

•   Wyszukuje pliki, które są przez zapisywalne dla ich właściciela lub dla ich grupy.

    $ find . -perm /220
    $ find . -perm /u+w,g+w
    $ find . -perm /u=w,g=w

    Wszystkie trzy polecenia wykonują to samo, lecz pierwsze używa reprezentacji ósemkowej praw lików, a pozostałe dwa - postaci symbolicznej. Pliki nie muszą być zapisywalne zarówno przez właściciela jak i grupę, aby zostać dopasowane; wystarczy spełnić jeden warunek.

•   Wyszukuje pliki, które są zapisywalne dla ich właściciela oraz dla ich grupy.

    $ find . -perm -220
    $ find . -perm -g+w,u+w

    Oba te polecenia robią to samo.

•   Bardziej skomplikowane przeszukiwanie uprawnień.

    $ find . -perm -444 -perm /222 \! -perm /111
    $ find . -perm -a+r -perm /a+w \! -perm /a+x

    Oba polecenia wyszukują pliki odczytywalne dla wszystkich (-perm -444 lub -perm -a+r), mające ustawiony co najmniej jeden bit zapisu (-perm /222 lub -perm /a+w), lecz nie będące wykonywalne dla kogokolwiek (odpowiednio ! -perm /111 lub ! -perm /a+x).

  Wycinanie - pomijanie plików i podkatalogów

•   Polecenie to kopiuje zawartość /source-dir do /dest-dir, lecz pomija pliki lub katalogi o nazwach .snapshot (i wszystko wewnątrz ich). Pomija również pliki lub katalogi o nazwach kończących się na "~", lecz nie ich zawartość.

    $ cd /source-dir
    $ find . -name .snapshot -prune -o \( \! -name '*~' -print0 \) \
    | cpio -pmd0 /dest-dir

    Konstrukcja -prune -o \( ... -print0 \) jest dość częsta. Pomysł jest taki, że wyrażenie przed -prune dopasowuje rzeczy, które mają być wycięte. Jednak sama akcja -prune zwraca prawdę, więc kolejna -o upewnia się, że prawa strona jest obliczana tylko dla niewyciętych katalogów (zawartość wycinanych katalogów nie jest nawet sprawdzana, więc ich zawartość jest nieistotna). Wyrażenie po prawej stronie -o, znajduje się w nawiasach jedynie dla przejrzystości. Podkreśla, że akcja -print0 ma miejsce jedynie do rzeczy, do których nie zastosowano -prune. Ponieważ domyślna zależność "and" (i) jest ściślejsza niż -o, tak jest domyślnie, lecz nawiasy pomagają pokazać o co chodzi.

•   Podając następujący katalog projektu i powiązany katalog administracyjny SCM, wykonuje wydajne wyszukiwanie korzeni projektów:

    $ find repo/ \
    \( -exec test -d '{}/.svn' \; \
    -or -exec test -d '{}/.git' \; \
    -or -exec test -d '{}/CVS' \; \
    \) -print -prune

    Przykładowe wyjście:

    repo/project1/CVS
    repo/gnu/project2/.svn
    repo/gnu/project3/.svn
    repo/gnu/project3/src/.svn
    repo/project4/.git

    W tym przykładzie, -prune zapobiega niepotrzebnemu zagłębianiu się w już odkryte katalogi (np. nie szuka się w project3/src, ponieważ znaleziono już project3/.svn), lecz znajduje katalogi sąsiednie (project2 i project3).

  Inne przydatne przykłady

•   Wyszukiwanie różnych typów plików.

    $ find /tmp -type f,d,l

    Wyszukuje pliki, katalogi i dowiązania symboliczne w katalogu /tmp, przetwarzając te typy jako listę rozdzieloną przecinkiem (rozszerzenie GNU), co jest odpowiednikiem dłuższego, lecz bardziej przenośnego:

    $ find /tmp \( -type f -o -type d -o -type l \)

•   Wyszukuje pliki o podanej nazwie needle i zatrzymuje natychmiast po znalezieniu pierwszego z nich.

    $ find / -name needle -print -quit

•   Pokazuje interpretację dyrektyw formatu %f i %h akcji -printf dla pewnych skrajnych przypadków. Oto przykład i nieco wyniku.

    $ find . .. / /tmp /tmp/TRACE compile compile/64/tests/find -maxdepth 0 -printf '[%h][%f]\n'
    [.][.]
    [.][..]
    [][/]
    [][tmp]
    [/tmp][TRACE]
    [.][compile]
    [compile/64/tests][find]

STATUS ZAKOŃCZENIA
find wychodzi ze statusem 0, gdy pomyślnie przetworzono wszystkie pliki i większym niż 0, gdy wystąpił błąd. Jest to bardzo ogólny opis, lecz gdy zwracaną wartością nie jest zero, nie powinno się po prostu polegać na poprawności wyników find.

Jeśli wystąpi jakiś błąd, find może się natychmiast zatrzymać, bez ukończenia wszystkich podanych akcji. Przykładowo, mogły nie zostać sprawdzone pewne punkty początkowe lub oczekujące wywołania programu dla -exec ... {} + lub -execdir ... {} + mogły nie zostać wykonane.

HISTORIA

Program find pojawił się w 5 wersji Uniksa, jako część projektu Programmer's Workbench i został napisany przez Dicka Haighta. A Research UNIX Reader: Annotated Excerpts from the Programmer’s Manual, 1971-1986 autorstwa Douga McIlroya opisuje pewne dodatkowe szczegóły, można przeczytać go pod adresem <https://www.cs.dartmouth.edu/~doug/reader.pdf>.

GNU find został pierwotnie napisany przez Erica Deckera, z ulepszeniami autorstwa Davida MacKenziego, Jaya Pletta i Tima Wooda. Pomysł find -print0 i xargs -0 pochodzi od Dana Bernsteina.

ZGODNOŚĆ
Od findutils-4.2.2, metaznaki powłoki (np. "*", "?" lub "[]") używane we wzorcach nazw plików dopasują początkowe ".", ponieważ wymaga tego interpretacja 126 IEEE POSIX.

Od findutils-4.3.3, -perm /000 dopasowuje wszystkie pliki, zamiast żadnego.

W findutils-4.3.3 zaimplementowano nanosekundową rozdzielczość znaczników czasu.

Od findutils-4.3.11, akcja -delete ustawia kod zakończenia find na wartość niezerową, jeśli się nie powiedzie. find nie wyjdzie jednak od razu. Wcześniej, kod zakończenia find nie zmieniał się pod wpływem niepowodzenia -delete.
Funkcja | Dodana w | Pojawia się też w
-files0-from | 4.9.0
-newerXY | 4.3.3 | BSD
-D | 4.3.1
-O | 4.3.1
-readable | 4.3.0
-writable | 4.3.0
-executable | 4.3.0
-regextype | 4.2.24
-exec ... + | 4.2.12 | POSIX
-execdir | 4.2.12 | BSD
-okdir | 4.2.12
-samefile | 4.2.11
-H | 4.2.5 | POSIX
-L | 4.2.5 | POSIX
-P | 4.2.5 | BSD
-delete | 4.2.3
-quit | 4.2.3
-d | 4.2.3 | BSD
-wholename | 4.2.0
-iwholename | 4.2.0
-ignore_readdir_race | 4.2.0
-fls | 4.0
-ilname | 3.8
-iname | 3.8
-ipath | 3.8
-iregex | 3.8

Składnia -perm +TRYB została usunięta w findutils-4.5.12 na korzyść -perm /TRYB. Składnia +TRYB była uznawana za przestarzałą od findutils findutils-4.2.21, wydanego w 2005 r.

TO NIE SĄ BŁĘDY

  Zaskakująca kolejność operatorów
Polecenie find . -name plik-a -o -name plik-b -print nigdy nie wypisze plik-a, ponieważ faktycznie odpowiada ono find . -name plik-a -o \( -name plik-b -a -print \). Proszę pamiętać, że -a ma pierwszeństwo przed -o, a gdy nie poda się operatora między testami, przyjmowane jest -a.

  Błąd „ścieżki muszą poprzedzać wyrażenie”
$ find . -name *.c -print
find: ścieżki muszą poprzedzać wyrażenie
find: czyżby nie zacytowany wzorzec po wyrażeniu `-name'?

Zdarza się to, gdy powłoka mogłaby rozwinąć wzorzec *.c do więcej niż jednej nazwy istniejącej w bieżącym katalogu, a przekazanie wynikowych nazw plików w wierszu polecenia do find wyglądałoby tak:
find . -name frcode.c locate.c word_io.c -print
Takie polecenie oczywiście nie zadziała, ponieważ wskazanie -name pozwala na podanie tylko pojedynczego wzorca jako argumentu. Zamiast robienia tego w ten sposób, należy ująć wzorzec w cudzysłowy lub zacytować wieloznacznik, w sposób pozwalając programowi find na użycie wzorca z wieloznacznikiem przy wyszukiwaniu pasującej nazwy pliku, zamiast pozwalać na interpretowanie go przez powłokę nadrzędną:
$ find . -name '*.c' -print
$ find . -name \*.c -print

USTERKI
Występują pewne zagrożenia związane z bezpieczeństwem, będące wynikiem tego, co standard POSIX przewiduje dla find - dlatego nie mogą być naprawione. Na przykład akcja -exec jest niebezpieczna i powinno się używać w zamian -execdir.

Zmienna środowiskowa LC_COLLATE nie ma wpływu na akcję -ok.

ZGŁASZANIE BŁĘDÓW
Strona internetowa z pomocą GNU findutils: <https://www.gnu.org/software/findutils/#get-help>
O błędach tłumaczenia programu prosimy poinformować przez <https://translationproject.org/team/pl.html>

Wszelkie inne problemy prosimy zgłaszać za pomocą systemu śledzenia błędów GNU Savannah:
    <https://savannah.gnu.org/bugs/?group=findutils>
Do ogólnej dyskusji na tematy związane z pakietem GNU findutils służy lista dyskusyjna bug-findutils:
    <https://lists.gnu.org/mailman/listinfo/bug-findutils>

PRAWA AUTORSKIE
Copyright © 1990–2024 Free Software Foundation, Inc. Licencja GPLv3+: GNU GPL w wersji 3 lub późniejszej <https://gnu.org/licenses/gpl.html>.
Jest to wolne oprogramowanie: można je zmieniać i rozpowszechniać. Nie ma ŻADNEJ GWARANCJI, w granicach określonych przez prawo.

ZOBACZ TAKŻE
chmod(1), locate(1), ls(1), updatedb(1), xargs(1), lstat(2), stat(2), ctime(3) fnmatch(3), printf(3), strftime(3), locatedb(5), regex(7)

Pełna dokumentacja: <https://www.gnu.org/software/findutils/find>
albo dostępna lokalnie przez: info find

TŁUMACZENIE
Tłumaczenie niniejszej strony podręcznika: Przemek Borys <pborys@dione.ids.pl> i Michał Kułach <michal.kulach@gmail.com>

Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 (https://www.gnu.org/licenses/gpl-3.0.html) lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.