find - szuka plików w drzewie katalogów
find [-H] [-L] [-P] [-D
opcje-debugowania] [-Opoziom]
[punkt-początkowy...] [wyrażenie]
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 -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.
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 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 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.
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.
- -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
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.
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.
- 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.
- •
- 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.
- •
- 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.
- •
- 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ł).
- •
- 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 ... +`.
- •
- 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).
- •
- 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).
- •
- 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]
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.
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.
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.
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
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.
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>
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.
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 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.