FIND(1) General Commands Manual FIND(1) NAZWA find - szuka plikow w drzewie katalogow SKLADNIA find [-H] [-L] [-P] [-D opcje-debugowania] [-Opoziom] [punkt-poczatkowy...] [wyrazenie] OPIS Ta strona podrecznika man opisuje wersje GNU programu find. GNU find przeszukuje drzewo katalogowe, zakorzenione w kazdej z podanych punktow poczatkowych. Wykonuje przy tym podane wyrazenie od lewej do prawej, zgodnie z zasadami priorytetow (rozdzial OPERATORY), az do ustalenia wyniku (lewa strona jest falszywa dla operacji and, a prawdziwa dla or), co powoduje przejscie do nastepnej nazwy pliku. Jesli nie podano punktu poczatkowego, przyjmuje sie ".". W przypadku uzywania find w srodowisku, w ktorym istotne jest bezpieczenstwo (np. przy przeszukiwaniu katalogow, ktore sa zapisywalne dla innych uzytkownikow), nalezy zapoznac sie z rozdzialem "Security Considerations" w dokumentacji findutils, pod nazwa Finding Files. Dokument ten (w jezyku angielskim) jest bardziej szczegolowy i opisowy niz niniejsza strona podrecznika systemowego, wiec moze okazac sie przydatniejszym zrodlem informacji. OPCJE Opcje -H, -L i -P kontroluja sposob traktowania dowiazan symbolicznych. Kolejne argumenty wiersza polecen powinny byc plikami lub katalogami do przeszukania, az do pierwszego argumentu rozpoczynajacego sie znakiem "-" albo argumentu "(" lub "!". Argumenty te (razem z nastepnymi) sa rozpoznawane jako wyrazenie opisujace to, co ma zostac przeszukane. Jesli nie zostanie podana sciezka, uzyty bedzie biezacy katalog. W przypadku braku wyrazenia, uzywane jest domyslne wyrazenie -print (lecz wowczas i tak zapewne lepsze byloby skorzystanie z -print0). Niniejsza strona podrecznika opisuje "opcje" w liscie wyrazen. Opcje te kontroluja zachowanie find, lecz sa podane zaraz za ostatnia nazwa sciezkowa. Z kolei piec "prawdziwych" opcji (-H, -L, -P, -D i -O) musi pojawic sie przed sciezka, oczywiscie jesli okaza sie potrzebne. Podwojny dywiz -- moze teoretycznie posluzyc do zasygnalizowania, ze pozostale argumenty nie sa opcjami, jednak w praktyce to nie dziala zbyt dobrze ze wzgledu na sposob, w jaki find okresla koniec kolejnych argumentow sciezkowych: robi to odczytujac je do momentu pojawienia sie argumentu wyrazenia (ktore rowniez zaczyna sie od "-"). Zatem jesli argument sciezki zaczynalby sie od "-", to find potraktowalby go jako argument wyrazenia. Z tego powodu, aby zapewnic, ze wszystkie punkty poczatkowe sa prawidlowo interpretowane, a w szczegolnosci aby uniknac sytuacji, gdy wieloznaczniki rozwiniete przez wywolujaca powloke zostalyby potraktowane jako argumenty wyrazen, bezpieczniej jest albo poprzedzac wieloznaczniki lub dwuznaczne nazwy sciezek znakami "./", albo podawac sciezki jako absolutne, zaczynajace sie od "/". Alternatywnym, choc nieprzenosnym, zwykle bezpiecznym sposobem przekazywania dowolnych punktow poczatkowych wyszukiwan do find, jest korzystanie z opcji GNU -files0-from -P Nigdy nie podaza za dowiazaniami symbolicznymi. Jest to zachowanie domyslne. Gdy find sprawdza lub wypisuje informacje o plikach, a jest on dowiazaniem symbolicznym, to uzyta informacja powinna byc wzieta z wlasciwosci samego dowiazania symbolicznego. -L Podaza za dowiazaniami symbolicznymi. Gdy find sprawdza lub wypisuje informacje o plikach, to powinny byc one wziete z wlasciwosci pliku, na ktory wskazuje dowiazanie symboliczne, a nie z samego dowiazania (chyba, ze jest to zerwane dowiazanie symboliczne lub find nie moze sprawdzic pliku, na ktory wskazuje dowiazanie). Uzycie tej opcji implikuje -noleaf. Jesli uzyje sie pozniej -P, to -noleaf wciaz bedzie dzialac. Jesli dziala -L, a find podczas wyszukiwania odkryje dowiazanie symboliczne do podkatalogu, to przeszukany zostanie podkatalog, na ktory wskazuje dowiazanie. Gdy dziala opcja -L, to wskazanie -type zawsze bedzie dopasowane w odniesieniu do typu pliku, na ktory wskazuje dowiazanie, zamiast do samego dowiazania (chyba, ze jest ono zerwane). Akcje, ktore moga spowodowac zrywanie dowiazan symbolicznych w trakcie dzialania find (np. -delete) moga spowodowac dezorientujace zachowanie. Uzycie -L spowoduje, ze wskazanie -lname i -ilname zawsze zwroci falsz. -H Nie podaza za dowiazaniami symbolicznymi, z wyjatkiem przetwarzania argumentow wiersza polecenia. Gdy find sprawdza lub wypisuje informacje o plikach, powinny byc one brane z wlasciwosci samego dowiazania symbolicznego. Jedynym wyjatkiem jest sytuacja, gdy plik podany w wierszu polecenia jest dowiazaniem symbolicznym i moze byc ono rozwiazane. Wowczas informacja jest brana z tego, na co wskazuje dowiazanie (tj. podaza sie za dowiazaniem). Informacja z samego dowiazania jest uzywana w razie, gdy plik, na ktory wskazuje dowiazanie nie moze byc sprawdzony. Gdy dziala -H i jedna ze sciezek podanych w wierszu polecenia jest dowiazaniem symbolicznym do katalogu, sprawdzana jest zawartosc tego katalogu (zapobiegnie temu skorzystanie z -maxdepth 0). Jesli podano wiecej niz jedna z opcji -H, -L i -P, kazda przeslania poprzednia - liczy sie ostatnia podana w wierszu polecenia, Poniewaz opcja -P jest domyslna, powinno sie ja uznac za dzialajaca, chyba ze podano -H lub -L. GNU find czesto sprawdza status plikow podczas przetwarzania samego wiersza polecenia, przed rozpoczeciem wlasciwego przeszukiwania. Opcje te moga rowniez wplywac na sposob przetworzenia argumentow. Co wiecej, istnieje wiele testow, ktore porownuja pliki z wiersza polecenia do aktualnie rozwazanego pliku. W kazdym przypadku, plik podany w wierszu polecenia bedzie sprawdzony i niektore z jego wlasciwosci zostana zachowane. Jezeli nazwany plik jest w rzeczywistosci dowiazaniem symbolicznym, a dziala opcja -P (lub nie podano -H, ani -L), to informacja uzyta do porownania zostanie wzieta z wlasciwosci dowiazania symbolicznego. W przeciwnym razie, wlasciwosci beda wziete z pliku, na ktory wskazuje dowiazanie. Jezeli find nie moze podazyc za dowiazaniem (np. poniewaz ma niewystarczajace uprawnienia lub dowiazanie wskazuje na nieistniejacy plik) zostana uzyte wlasciwosci samego dowiazania. Gdy dziala opcja -H lub -L, rozwiazywane sa wszystkie dowiazania symboliczne podane jako argument do opcji -newer, a znaczniki czasowe beda wziete z pliku, na ktory wskazuje dowiazanie symboliczne. To samo dotyczy opcji -newerXY, -anewer i -cnewer. Opcja -follow ma podobne dzialanie do -L, choc dziala tylko w miejscu pojawienia sie (tj. jesli -L nie jest uzyte, a skorzystano z -follow, to wszystkie dowiazania symboliczne pojawiajace sie w wierszu polecen za -follow zostana rozwiazane, lecz umieszczone wczesniej - nie). -D debugopts Wyswietla informacje diagnostyczne - moze okazac sie przydatna do zdiagnozowania przypadkow, gdy find nie robi tego czego od niego oczekujemy. Lista opcji debugowania powinna byc oddzielona przecinkami. Nie gwarantuje sie kompatybilnosci opcji debugowania pomiedzy wydaniami findutils. Pelna liste prawidlowych opcji debugowania wyswietli polecenie find -D help. Sa to miedzy innymi: exec Wyswietla informacje diagnostyczne zwiazane z -exec, -execdir, -ok i -okdir. opt Wyswietla informacje diagnostyczne zwiazane z optymalizacje drzewka wyrazen; patrz opcja -O. rates Wyswietla podsumowanie wskazujace czestosc sukcesu lub porazki kazdego wskazania. search Informuje o przechodzeniu przez drzewo katalogow. stat Wyswietla komunikaty o plikach sprawdzanych przez wywolania systemowe stat i lstat. Program find stara sie zminimalizowac liczbe takich wywolan. tree Wyswietla drzewko wyrazen w formie oryginalnej i zoptymalizowanej. all Wlacza wszystkie inne opcje debugowania (poza help). help Objasnia opcje debugowania. -Opoziom Wlacza optymalizacje zapytan. Program find zmienia kolejnosc testow, aby przyspieszyc wykonanie przy zachowaniu efektu koncowego; tj. nie zmienia sie wskazan z efektami ubocznymi w stosunku do kazdego innego. Optymalizacje sa przeprowadzane zgodnie z ponizszymi poziomami optymalizacji. 0 Odpowiednik poziomu optymalizacji 1. 1 Jest to domyslny poziom optymalizacji i odnosi sie do tradycyjnego zachowania. Kolejnosc wyrazen jest zmieniana w ten sposob, ze testy dzialajace tylko na nazwach plikow (np. -name lub -regex) sa wykonywane jako pierwsze. 2 Testy -type lub -xtype sa wykonywane po testach dzialajacych tylko na nazwach plikow, lecz przed testami wymagajacymi informacji z i-wezla. W wielu wspolczesnych wersjach Uniksa, typy plikow sa zwracane przez readdir(), a wiec sa szybsze do sprawdzenia niz wskazowki, ktore wymagaja uprzedniego wykonania stat. Jesli korzysta sie z wskazan -fstype FOO i poda sie typ systemu plikow FOO, ktory nie jest znany (tj. nieobecny w "/etc/mtab") w momencie uruchomienia find, wskazanie to bedzie rownowazne -false. 3 Na tym poziomie optymalizacji, wlaczona jest pelna optymalizacja, dzialajaca w oparciu o koszt zapytan. Kolejnosc testow jest modyfikowana w taki sposob, aby tanie (szybkie) testy byly przeprowadzane wczesniej, a drozsze - pozniej, jesli to konieczne. Wewnatrz kazdej grupy kosztowej, wskazania sa przeprowadzane wczesniej lub pozniej, zgodnie z prawdopodobienstwem ich powodzenia. Przy -o, wskazania o wiekszym prawdopodobienstwie sukcesu sa przeprowadzane wczesniej, a przy -a, wczesniej wykonywane sa wskazania o wiekszym prawdopodobienstwie niepowodzenia. Optymalizator dzialajacy w oparciu o koszty, ma z gory przyjete zalozenie o prawdopodobienstwie powodzenia danego testu. W niektorych przypadkach, prawdopodobienstwo bierze pod uwage nature testu (np. -type f powinien konczyc sie sukcesem czesciej niz -type c). Optymalizator jest jeszcze w fazie kalkulacji. Jesli nie poprawi to wydajnosci programu find, zostanie ponownie usuniety. Podobnie, optymalizacje, ktore udowodnia swa rzetelnosc, spojnosc i efektywnosc, moga w przyszlosci zostac wlaczone na nizszym poziomie optymalizacyjnym. Jednak domyslne zachowanie (poziom optymalizacji 1) nie zmieni sie w wydaniach 4.3.x. Zestaw testow findutils wykonuje wszystkie testy find na kazdym poziomie optymalizacji, aby miec pewnosc, ze wyniki pozostaja te same. Zmiana kolejnosci wykonywanych operacji dokonana przez optymalizator kosztowy moze spowodowac odczuwalna dla uzytkownika zmiane zachowania. Na przyklad wskazania -readable i -empty sa wrazliwe na zmiane kolejnosci. Jesli zostana uruchomione w kolejnosci -empty -readable, dla nieodczytywalnych katalogow zostanie wypisany blad. Z kolei w kolejnosci -readable -empty taki blad nie wystapi. Jest to powod, dla ktorego tego typu zmiana kolejnosci operacji nie jest dokonywana na domyslnym poziomie optymalizacji. WYRAZENIE Czesc wiersza polecen po liscie punktow poczatkowych jest wyrazeniem. Jest to rodzaj okreslenia zapytania, opisujacego w jaki sposob dopasowywac pliki i co z nimi zrobic po dopasowaniu. Wyrazenie sklada sie z kilku rzeczy: Testy Testy zwracaja prawde lub falsz, zwykle na podstawie jakiejs wlasnosci rozwazanego pliku. Na przyklad test -empty jest prawdziwy tylko, gdy biezacy plik jest pusty. Akcje Akcje maja efekty poboczne (takie jak wypisywanie czegos na standardowym wyjsciu) i zwracaja prawde lub falsz, zwykle w zaleznosci od tego, czy sie powioda. Akcje -print wypisuje na przyklad nazwe biezacego pliku na standardowym wyjsciu. Opcje globalne Opcje globalne wplywaja na dzialanie testow i akcji podanych w dowolnej czesci wiersza polecen. Opcje globalne zawsze zwracaja prawde. Na przyklad opcja -depth powoduje, ze find przechodzi przez system plikow, zaglebiajac sie najpierw w katalogach. Opcje pozycyjne Opcje pozycyjne wplywaja tylko na testy lub akcje, ktore wystepuja za nimi. Opcja pozycyjne zawsze zwracaja prawde. Na przyklad opcja -regextype jest pozycyjna, okresla dialekt wyrazen regularnych, dla wyrazen regularnych, ktore pojawia sie dalej w wierszu polecenia. Operatory Operatory lacza inne rzeczy w wyrazeniu. Obejmuja na przyklad -o (oznaczajace logiczne LUB -- OR) oraz -a (oznaczajace logiczne ORAZ -- AND). Tam, gdzie nie podano operatora, przyjmowane jest -a. Akcja -print jest wykonywana na wszystkich plikach, dla ktorych prawdziwe jest cale wyrazenie, chyba ze zawiera ono akcje inna niz -prune lub -quit. Akcjami wstrzymujacymi domyslne -print sa: -delete, -exec, -execdir, -ok, -okdir, -fls, -fprint, -fprintf, -ls, -print i -printf. Akcja -delete dziala rowniez jak opcja (poniewaz wymusza -depth). OPCJE POZYCYJNE Opcje pozycyjne zawsze zwracaja prawde. Wplywaja jedynie na testy, ktore znajduja sie za nimi w wierszu polecenia. -daystart Mierzy czasy (dla -amin, -atime, -cmin, -ctime, -mmin i -mtime) od dzis, a nie od 24 godzin temu. Opcja ta wplywa jedynie na testy, pojawiajace sie pozniej w wierszu polecenia. -follow Przestarzale, prosze zamiast tego uzyc opcji -L. Rozwiazuje dowiazania symboliczne. Implikuje -noleaf. Opcja -foolow dziala jedynie na testy pojawiajace sie w wierszu polecenia za nia. O ile nie poda sie opcji -H lub -L, pozycja opcji -follow zmienia zachowanie wskazania -newer - pliki bedace argumentami -newer zostana rozwiazane, jesli sa dowiazaniami symbolicznymi. To samo dotyczy opcji -newerXY, -anewer and -cnewer. Podobnie, wskazanie -type zostanie zawsze dopasowane do pliku wskazanego przez dowiazanie symboliczne, zamiast do samego dowiazania. Uzycie -follow powoduje, ze wskazania -lname i -ilname zawsze zwracaja falsz. -regextype typ Zmienia skladnie wyrazen regularnych rozumianych przez testy -regex i -iregex podane pozniej w wierszu polecen. Znane typy wyrazen regularnych wypisze -regextype help. Dokumentacja Texinfo (zob. ZOBACZ TAKZE) wyjasnia znaczenie i roznice miedzy poszczegolnymi typami wyrazen regularnych. Jesli nie uzyje sie tej opcji, find zachowuje sie tak, jakby podano typ wyrazen regularnych emacs. -warn, -nowarn Odpowiednio: wlacza lub wylacza ostrzezenia. Odnosza sie one wylacznie do uzycia wiersza polecen, a nie do warunkow zastanych przez find podczas przeszukiwania katalogow. Domyslne zachowanie odpowiada -warn gdy standardowym wejsciem jest tty i -nowarn w przeciwnym wypadku. Jesli utworzone zostanie ostrzezen zwiazane z uzycie wiersza polecenia, nie ma to wplywu na status zakonczenia find. Jesli ustawiono zmienna srodowiskowa POSIXLY_CORRECT i podano rowniez -warn nie jest okreslone ktore, ani czy w ogole, ostrzezenia beda aktywne. OPCJE GLOBALNE Opcje globalne zawsze zwracaja prawde. Opcje globalne dzialaja nawet wobec testow, ktore wystepuja wczesniej w wierszu polecenia. Aby uniknac zamieszania, opcje globalne nalezy podawac w wierszu polecenia po liscie punktow poczatkowych, a przed pierwszymi testami, opcjami pozycyjnymi lub akcjami. Jesli poda sie opcje globalna w innym miejscu, find wypisze ostrzezenie, wyjasniajace ze moze byc to mylace. Opcje globalne pojawiaja sie po liscie punktow poczatkowych, zatem nie sa opcjami tego samego typu jak np. -L. -d Synonim -depth, ze wzgledu na kompatybilnosc z FreeBSD, NetBSD, MacOS X i OpenBSD. -depth Przetwarza zawartosc kazdego katalogu przed samym katalogiem jako takim. Akcja -delete implikuje takze -depth. -files0-from plik Odczytuje punkty poczatkowe z pliku zamiast uzyskiwac je z wiersza polecen. W odroznieniu od znanych ograniczen zwiazanych z przekazywaniem punktow poczatkowych jako argumenty w wierszu polecen, w szczegolnosci ograniczen zwiazanych z liczba nazw plikow, a takze nieodlaczna niepewnoscia jesli chodzi o roznicowanie nazw plikow z nazwami opcji, uzycie tej opcji pozwala na bezpieczne przekazanie dowolnej liczby punktow poczatkowych programowi find. Korzystanie z tej opcji oraz przekazanie punktow poczatkowych w wierszu polecenia wyklucza sie wzajemnie, zatem nie mozna tego zrobic w tym samym czasie. Argument plik jest obowiazkowy. Mozna uzyc postaci -files0-from -, aby odczytac liste punktow poczatkowych ze strumienia standardowego wejscia i np. z potoku. W takim przypadku nie sa dozwolone akcje -ok i -okdir, poniewaz oczywiscie kolidowalyby z odczytywaniem ze standardowego wejscia w celu uzyskania potwierdzen od uzytkownika. Punkty poczatkowe w pliku nalezy rozdzielac znakami NUL ASCII. Dwa znaki NUL nastepujace po sobie tj. punkt poczatkowy z nazwa pliku o zerowej dlugosci nie sa dopuszczalne i spowoduja wypisanie bledu wraz z pozniejszym niezerowym statusem zakonczenia. Jesli podany plik bedzie pusty, find nie przetworzy punktu poczatkowego, zatem wyjdzie bezposrednio po przetworzeniu argumentow programu. Rozni sie to od standardowego wywolania find gdy, jesli nie poda sie argumentu sciezki, program przyjmuje katalog biezacy jako punkt poczatkowy. Poza tym, przetwarzanie punktow poczatkowych nastepuje wedle zwyklych regul np. find przejdzie rekurencyjnie do podkatalogow, o ile nie wskazano inaczej. Aby przetworzyc tylko punktu poczatkowe, mozna podac dodatkowo -maxdepth 0. Dalsze uwagi: jesli poda sie ten sam plik kilkakrotnie w pliku wejsciowym, jest nieokreslone, czy zostanie odwiedzony wiecej niz raz. Jesli plik zostanie zmieniony podczas dzialania find, wynik jest rowniez nieokreslony. Dodatkowo, pozycja przeszukania w nazwanym pliku, w momencie gdy find wyjdzie, ze wzgledu na -quit lub z innej przyczyny, takze jest nieokreslona. Przez "nieokreslone" rozumiemy tu fakt, ze moze to zadzialac lub nie albo dokonac jakiejs rzeczy, a zachowanie to moze roznic sie miedzy platformami oraz miedzy wydaniami findutils. -help, --help Wypisuje sposob uzycia find z wiersza polecen i konczy prace programu. -ignore_readdir_race Zwykle find wyswietla blad, gdy nie uda mu sie pobrac statusu pliku. Po podaniu tej opcji i usunieciu pliku pomiedzy odczytem przez find nazwy pliku z katalogu i momentem proby pobrania statusu, blad nie zostanie wyswietlony. Dotyczy to rowniez plikow i katalogow podanych w wierszu polecenia. Opcja ta zaczyna dzialac juz przy odczycie wiersza polecenia, co oznacza, ze nie da sie przeszukiwac systemu plikow czesciowo z opcja wlaczona i czesciowo z wylaczona (aby to zrobic, konieczne jest dwukrotne uruchomienie polecenia find, jeden raz z opcja wlaczona, a drugi - z wylaczona). Co wiecej, find z opcja -ignore_readdir_race zignoruje bledy akcji -delete w przypadku, gdy plik zniknie od momentu odczytania katalogu macierzystego: program nie wypisze zadnego bledu, a zwracanym kodem akcji -delete bedzie prawda. -maxdepth glebokosc Schodzi maksymalnie o glebokosc (nieujemna liczba calkowita) poziomow katalogow od punktow poczatkowych. Podanie -maxdepth 0 oznacza, ze testy i akcje stosuja sie tylko do samych punktow poczatkowych. -mindepth glebokosc Nie stosuje testow lub akcji w poziomach nizszych niz glebokosc (nieujemna liczba calkowita). Uzycie mindepth 1 oznacza przetwarzanie wszystkich plikow poza punktami poczatkowymi. -mount Nie zaglebia sie w katalogi na innych systemach plikow. Jest to alternatywna nazwa dla -xdev, stworzona dla zgodnosci z innymi wersjami find. -noignore_readdir_race Wylacza efekt opcji -ignore_readdir_race. -noleaf Zakazuje optymalizacji wykonywanej przez zakladanie, ze katalogi zawieraja o dwa podkatalogi mniej niz ich licznik dowiazan zwyklych (twardych). Opcja ta jest wymagana podczas przeszukiwania systemow plikow, ktore nie uzywaja uniksowej konwencji wiazania katalogow, takich jak systemy plikow CD-ROM, MS-DOS czy wolumeny AFS. Kazdy katalog w normalnym systemie uniksowym zawiera przynajmniej dwa twarde dowiazania: jego nazwe i ".". Dodatkowo, jego podkatalogi beda do niego dowiazane za pomoca ".." kazdy. Gdy find testuje katalog po zbadaniu funkcja stat o 2 mniej podkatalogow niz licznik dowiazan, wie, ze reszta wpisow jest niekatalogowa (sa to "liscie" - "leaf" w drzewie katalogow). Jesli testowane maja byc tylko nazwy plikow, to nie ma potrzeby ich sprawdzac; daje to znaczace przyspieszenie. -version, --version Wypisuje wersje i konczy prace. -xdev Nie zaglebia sie w katalogi na innych systemach plikow. TESTY Niektore testy np. -newerXY i -samefile pozwalaja na porownanie pomiedzy aktualnie sprawdzanym plikiem i plikiem odniesienia podanym w wierszu polecenia. Gdy te testy sa uzywane, interpretacja pliku odniesienia zalezy od opcji -H, -L i -P i podanej wczesniej -follow, lecz plik odniesienia jest sprawdzany tylko raz, przy przetwarzaniu wiersza polecenia. Jesli plik odniesienia nie moze zostac sprawdzony (np. wywolanie systemowe stat(2) nie powiedzie sie na nim), wyswietlany jest blad, a find wychodzi z niezerowym kodem zakonczenia. Do testow (takich jak -amin, -mtime, -gid, -inum, -links, -size, -uid i -used) mozna podac argument numeryczny n jako +n dla wiekszych niz n, -n dla mniejszych niz n, n dla rownych n. Obslugiwane testy: -amin n Dostep do pliku nastapil ostatnio wczesniej niz, dawniej niz lub dokladnie n minut temu. -anewer odniesienie Czas ostatniego dostepu do biezacego pliku jest pozniejszy (nowszy) niz data ostatniej modyfikacji pliku odniesienia. Jesli odniesienie jest dowiazaniem i dziala jedna z opcji -H lub -L, to uzywany jest zawsze czas ostatniej modyfikacji pliku, na ktory wskazuje dowiazanie. -atime n Dostep do pliku mial miejsce wczesniej niz, pozniej niz lub dokladnie n*24 godzin temu. Gdy find dowie sie jak wiele okresow 24-godzinnych temu dostano sie do pliku, ignorowana jest czesc ulamkowa; tak wiec aby dopasowac -atime +1, dostep do pliku musial byc co najwyzej dwa dni temu. -cmin n Status pliku zostal zmieniony wczesniej niz, pozniej niz lub dokladnie n minut temu. -cnewer odniesienie Czas ostatniej zmiany statusu do biezacego pliku jest pozniejszy (nowszy) niz data ostatniej modyfikacji pliku odniesienia. Jesli odniesienie jest dowiazaniem i dziala jedna z opcji -H lub -L, to uzywany jest zawsze czas ostatniej modyfikacji pliku, na ktory wskazuje dowiazanie. -ctime n Status pliku zostal zmieniony wczesniej niz, dawniej niz lub dokladnie n*24 godzin temu. Prosze zapoznac sie z komentarzami do -atime, aby zrozumiec wplyw zaokraglenia na interpretacje czasu modyfikacji pliku. -empty Plik jest pusty i jest albo zwyklym plikiem, albo katalogiem. -executable Dopasowuje pliki, ktore sa wykonywalne i katalogi, ktore sa przeszukiwalne (w sensie tlumaczenia nazw pliku) dla biezacego uzytkownika. Bierze pod uwage listy kontroli dostepu (ACL) i inne zasady praw dostepu, ktore sa ignorowane przez test -perm. Ten test uzywa wywolania systemowego access(2) i moze byc zmylony przez serwery NFS uzywajace mapowania UID (lub root-squashing), gdyz wiele systemow implementuje access(2) w jadrze klienta i nie moze uzyc informacji mapowania UID po stronie serwera. Poniewaz test ten dziala tylko w oparciu o wywolanie systemowe access(2), nie ma gwarancji, ze plik dla ktorego test sie powiodl, moze byc w rzeczywistosci wykonany. -false Zawsze falszywe. -fstype typ Plik jest na systemie plikow o typie typ. Prawidlowe typy systemow plikow roznia sie na roznych wersjach Uniksa; ich niekompletna lista, ktora jest przyjmowana w czesci systemow to: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. Aby zobaczyc typy swoich systemow plikow, nalezy uzyc -printf z dyrektywa %F. -gid n Numeryczny GID pliku, ktory wynosi mniej niz, wiecej niz lub dokladnie n. -group nazwag Plik nalezy do grupy nazwag (numeryczny GID jest dopuszczalny). -ilname wzorzec Podobnie jak -lname, lecz dopasowanie jest niezalezne od wielkosci znakow. Jesli dziala opcja -L lub -follow, test zwraca falsz, chyba ze dowiazanie symboliczne jest zerwane. -iname pattern Podobnie jak -name, lecz dopasowanie jest niezalezne od wielkosci znakow. Na przyklad wzorce "fo*" i "F??" dopasuja nazwy plikow "Foo", "FOO", "foo", "fOo", itp. Wzorzec "*foo*" dopasuje rowniez plik '.foobar'. -inum n Plik ma numer i-wezla mniejszy niz, wiekszy niz lub dokladnie rowny n. Zwykle latwiej jest uzyc testu -samefile. -ipath wzorzec Podobne do -path, lecz dopasowanie jest niewrazliwe na rozmiar liter. -iregex wzorzec Podobne do -regex, lecz dopasowanie jest niewrazliwe na rozmiar liter. -ilname pattern Patrz -ipath. Ta alternatywa jest mniej przenosna niz wspomniana opcja. -links n Plik ma mniej niz, wiecej niz lub dokladnie n dowiazan zwyklych (twardych). -lname wzorzec Plik jest dowiazaniem symbolicznym, ktorego zawartosc odpowiada wzorcowi powloki wzorzec. Metaznaki nie traktuja specjalnie "/" i ".". Jesli dziala opcja -L lub -follow, to test zwraca falsz, chyba ze dowiazanie symboliczne jest zerwane. -mmin n Dane pliku byly ostatnio modyfikowane wczesniej niz, pozniej niz lub dokladnie n minut temu. -mtime n Dane pliku zostaly ostatnio zmodyfikowane wczesniej niz, pozniej niz lub dokladnie n*24 godziny temu. Prosze zapoznac sie komentarzami do opcji -atime, aby zrozumiec, w jaki sposob zaokraglanie wplywa na interpretacje czasow modyfikacji pliku. -name wzorzec Bazowa nazwa pliku ("basename", sciezka z usunietymi poprzedzajacymi katalogami) pasuje do wzorca powloki wzorzec. Z powodu usuniecia poczatkowych katalogow, wzorzec nie powinien zawierac ukosnika, poniewaz "-name a/b" nigdy niczego nie dopasuje (i raczej powinno sie wtedy uzyc -path). Wyjatkiem jest uzycie jako wzorca samego ukosnika ("-name /"), poniewaz jest to prawidlowy lancuch dopasowujacy katalog glowny "/" (poniewaz nazwa bazowa "/" jest "/"). Jesli sprobuje sie podac wzorzec zawierajacy - ale nieskladajacy sie wylacznie z - ukosnika, wypisane zostanie ostrzezenie, chyba ze ustawiono zmienna srodowiskowa POSIXLY_CORRECT, albo uzyto opcji -nowarn. Do zignorowania katalogu i podrzednych mu plikow, zamiast sprawdzania kazdego pliku w drzewie nalezy uzyc -prune, zob. przyklad w opisie tej akcji. Nawiasy klamrowe nie sa rozpoznawane jako specjalne, niezaleznie od faktu, ze niektore powloki, w tym Bash, nadaja mu specjalne znaczenie we wzorcach powloki. Dopasowanie nazwy pliku jest przeprowadzane za pomoca funkcji bibliotecznej fnmatch(3). Prosze nie zapomniec ujac wzorca w cudzyslowy, aby zapobiec interpretacji go przez powloke. -newer odniesienie Czas ostatniej modyfikacji biezacego pliku jest pozniejszy (nowszy) niz data ostatniej modyfikacji pliku odniesienia. Jesli odniesienie jest dowiazaniem i dziala jedna z opcji -H lub -L, to uzywany jest zawsze czas ostatniej modyfikacji pliku, na ktory wskazuje dowiazanie. -newerXY odniesienie Powodzi sie, jesli znacznik czasu X rozwazanego pliku jest nowszy niz znacznik czasu Y pliku odniesienia. Litery X i Y moga byc dowolnymi z ponizszych: a Czas dostepu (ang. access) pliku odniesienie B Czas powstania (ang. birth) pliku odniesienie c Czas zmiany (ang. change) statusu i-wezla odniesienia m Czas modyfikacji pliku odniesienie t odniesienie jest interpr. bezposrednio jako czas (ang. time) Niektore kombinacje sa nieprawidlowe, np. X nie moze byc t. Czesc kombinacji nie jest zaimplementowanych we wszystkich systemach, do takich nalezy np. B. Jesli poda sie nieprawidlowa lub nieobslugiwana kombinacje XY, otrzymuje sie blad krytyczny. Okreslenia czasowe sa interpretowane jak argument do opcji -d GNU date. Jezeli czas powstania pliku odniesienia nie moze byc ustalony, to przy probie uzycia go wynikiem jest komunikat o bledzie krytycznym. Jesli poda sie test, odnoszacy sie do czasu powstania sprawdzanych plikow, to test ten nie powiedzie sie dla wszystkich plikow, ktorych czas ten jest nieznany. -nogroup Do numerycznego GID pliku nie pasuje zadna grupa. -nouser Do numerycznego UID pliku nie pasuje zaden uzytkownik. -path wzorzec Nazwa pliku odpowiada wzorcowi powloki wzorzec. Metaznaki nie traktuja specjalnie "/" lub "."; tak wiec na przyklad, find . -path "./sr*sc" Wypisze wpis dla katalogu o nazwie ./src/misc (jesli taki istnieje). Aby zignorowac cale drzewo katalogu, zamiast sprawdzac kazdy plik w drzewie, nalezy uzyc -prune. Prosze zauwazyc, ze test dopasowuje wzorzec do calej nazwy pliku, poczynajac od punktu poczatkowego, podanego w wierszu polecenie. Jesli punkt startowy jest sciezka absolutna, sens ma zastosowanie rowniez wylacznie sciezki absolutnej. Oznacza to, ze ponizsze polecenie nigdy niczego nie dopasuje. find bar -path /foo/bar/myfile -print Find porownuje argument -path z przycieta nazwa katalogu oraz nazwa bazowa pliku, ktory jest sprawdzany. Jako ze przycieta nazwa katalogu nigdy nie bedzie konczyla sie ukosnikiem, argumenty -path konczace sie ukosnikiem niczego nie dopasuja (moze za wyjatkiem punktu poczatkowego podanego w wierszu polecenia). Wskazanie -path jest rowniez obslugiwane find HP-UX i jest czescia standardu POSIX 2008. -perm prawa Bity praw pliku sa dokladnie takie, jak prawa (w formie osemkowej lub symbolicznej). Poniewaz wymagane jest dokladne dopasowanie, stosowanie tej formuly w postaci symbolicznej wymaga podania dosc skomplikowanego lancucha praw. Na przyklad "-perm g=w" dopasuje jedynie pliki o trybie 0020 (tj. te, ktorych prawo zapisu dla grupy jest jedynym ustawionych uprawnieniem). Prawdopodobnie w takim przypadku lepsze jest uzycie form "/" lub "-", np. "-perm -g=w", ktore dopasowuje kazdy plik z prawem zapisu dla grupy. Lepsze przyklady podano w rozdziale PRZYKLADY. -perm -prawa Wszystkie bity praw pliku sa ustawione dla pliku. Akceptowane sa tryby w postaci symbolicznej i jest to zwykle wygodniejsza forma do uzycia. W przypadku korzystania z postaci symbolicznej trzeba podac "u", "g" lub "o". Lepsze przyklady podano w rozdziale PRZYKLADY. -perm /prawa Ustawiony jest dowolny z bitow praw pliku. Akceptowane sa tryby w postaci symbolicznej. W przypadku korzystania z postaci symbolicznej trzeba podac "u", "g" lub "o". Lepsze przyklady podano w rozdziale PRZYKLADY. Jesli nie ustawiono bitow praw w trybie, to test dopasuje kazdy plik (zgodnie z zamyslem, aby pozostac w zgodzie z zachowaniem -perm -000). -perm +prawa Nie jest juz obslugiwane (a bylo przestarzale od 2005 roku). Prosze uzyc w zamian -perm /tryb. -readable Dopasowuje pliki odczytywalne przez biezacego uzytkownika. Bierze sie tu pod uwage listy kontroli dostepu (ACL) i inne sprawy zwiazane z uprawnieniami, ktore -perm ignoruje. Ten test uzywa wywolania systemowego access(2) i moze byc zmylony przez serwery NFS uzywajace mapowania UID (lub root-squashing), gdyz wiele systemow implementuje access(2) w jadrze klienta i nie moze uzyc informacji mapowania UID po stronie serwera. -regex wzorzec Nazwa pliku odpowiada wyrazeniu regularnemu wzorzec. Dopasowanie stosuje sie do calej sciezki, nie dla przeszukiwanej. Na przyklad, aby dopasowac plik o nazwie ./fubar3, mozna uzyc wyrazenia regularnego ".*bar" lub ".*b.*3", lecz nie "f.*r3". Wyrazenia regularne rozumiane przez find sa domyslnie wyrazeniami regularnymi Emacsa, lecz mozna to zmienic opcja -regextype. -samefile nazwa Plik odnosi sie do tego samego i-wezla co nazwa. Gdy dziala opcja -L, obejmuje to dowiazania symboliczne. -size n[c|w|b|k|M|G] Plik uzywa mniej niz, wiecej niz lub dokladnie n jednostek miejsca, zaokraglajac w gore. Mozna dodac nastepujace przyrostki: b bloki 512-bajtowe (wartosc domyslna, gdy nie uzyto przyrostka) c bajty w slowa dwubajtowe k kibibajty (KiB, jednostka 1024 bajtow) M mebibajty (MiB, jednostka 1024 * 1024 = 1048576 bajtow) G gibibajty (GiB, jednostka 1024 * 1024 * 1024 = 1073741824 bajtow) Rozmiar jest czlonem st_size struktury stat wypelnionym przez wywolanie systemowe lstat (lub stat), zaokraglonym jak pokazano wyzej. Innymi slowy, jest on zgodny z wartosciami podawanymi przez ls -l. Prosze pamietac, ze okreslenia formatu "%k" i "%b" akcji -printf obsluguja pliki rzadkie w inny sposob. Przyrostek "b" oznacza zawsze bloki 512-bajtowe, a nigdy nie 1024-bajtowe, co rozni sie od zachowania -ls. Przedrostki + i - oznaczaja odpowiednio, wiekszy i mniejszy, wedle zwyklych regul tj. gdy dokladny rozmiar n jednostek nie jest sobie rowny. Prosze pamietac, ze rozmiar jest zaokraglany w gore do nastepnej jednostki. Z tego wzgledu -size -1M nie jest rownowazne -size -1048576c. Pierwszy dopasuje tylko puste pliki, a drugi dopasuje pliki od 0 do 1 048 575 bajtow. -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 zwykly plik l dowiazanie symboliczne (link); nigdy nie jest to prawda, gdy dziala opcja -L lub -foolow, chyba ze dowiazanie jest zerwane. Aby wyszukiwac dowiazania symboliczne przy korzystaniu z opcji -L, nalezy uzyc -xtype. s gniazdo D door (Solaris) Aby odszukac jednoczesnie wiecej niz jeden typ, mozna podac liste liter rozdzielonych przecinkiem "," (rozszerzenie GNU). -uid n Numeryczny UID pliku wynosi mniej niz, wiecej niz lub dokladnie n. -used n Do pliku ostatnio dostano sie wczesniej niz, dawniej niz lub dokladnie n dni po zmianie jego statusu. -user unazwa Wlascicielem pliku jest uzytkownik unazwa (numeryczny UID jest tu dozwolony). -wholename wzorzec Patrz -path. Ta alternatywa jest mniej przenosna niz wspomniana opcja. -writable Dopasowuje pliki zapisywalne dla biezacego uzytkownika. Bierze pod uwage listy kontroli dostepu (ACL) i inne zasady praw dostepu, ktore sa ignorowane przez test -perm. Ten test uzywa wywolania systemowego access(2) i moze byc zmylony przez serwery NFS uzywajace mapowania UID (lub root-squashing), gdyz wiele systemow implementuje access(2) w jadrze klienta i nie moze uzyc informacji mapowania UID po stronie serwera. -xtype c Jest to to samo co -type, chyba ze plik jest dowiazaniem symbolicznym. Dla dowiazan symbolicznych: jesli podano -H lub -P, jest prawdziwe gdy plik jest dowiazaniem do pliku typu c; jesli podano -L, jest prawdziwe, jesli c to "l". Innymi slowy, dla dowiazan symbolicznych -xtype sprawdza typ pliku, ktorego nie sprawdza -type. Jesli dowiazanie symboliczne jest zerwane (poniewaz rzecz, na ktora wskazuje, nie istnieje albo dowiazanie wskazuje samo na siebie), to -xtype zachowuje sie tak samo jak -type. -context wzorzec (tylko SELinux) Kontekst bezpieczenstwa pliku dopasowanego przez wzorzec typu glob. AKCJE -delete Usuwa pliki lub katalogi; prawdziwe gdy usuniecie powiedzie sie. Jesli nie, to wypisywany jest blad, a kod zakonczenia find bedzie niezerowy (gdy program ostatecznie sie zakonczy). Ostrzezenie: Prosze nie zapominac, ze find analizuje wiersz polecenia jako wyrazenie, zatem umieszczenie -delete jako pierwszego bedzie znaczylo, ze find sprobuje usunac wszystko ponizej podanych punktow poczatkowych. Skorzystanie z akcji -delete w wierszu polecenia automatycznie wlacza opcje -depth. Jako ze -depth z kolei powoduje, ze -prune jest nieskuteczne, akcji -delete nie da sie w praktyce polaczyc z -prune. Czesto uzytkownik moze chciec przetestowac wiersz polecenia find za pomoca akcji -print, przed dodaniem -delete do faktycznego przebiegu kasowania. Aby uniknac zaskakujacych wynikow, zwykle nalezy pamietac, aby podac -depth w tych wczesniejszych przebiegach testowych. Usuniecie katalogu przez akcje -delete nie powiedzie sie, chyba ze bedzie on pusty. Razem z opcja -ignore_readdir_race find zignoruje bledy akcji -delete w przypadku, gdy plik zniknie od momentu odczytania katalogu macierzystego: program nie wypisze zadnego bledu, nie zmieni kodu zakonczenia na niezerowy, a zwracanym kodem akcji -delete bedzie prawda. -exec polecenie ; Wykonuje polecenie; prawdziwe jesli zwrocony zostal status 0. Wszelkie nastepne argumenty find sa brane za argumenty polecenia, az nie zostanie napotkany argument, skladajacy sie z ";". Lancuch "{}' jest podmieniany na obecnie przetwarzana nazwe pliku, wszedzie, gdzie wystapi ona w wierszu polecenia, nie tylko w argumentach, gdzie jest ona sama, jak w niektorych wersjach find. Obydwie te konstrukcje byc moze beda wymagaly zacytowania (znakiem "\") aby uchronic je przed rozwinieciem przez powloke. Wiecej informacji na temat uzycia opcji -exec, zawiera rozdzial PRZYKLADY. Polecenie jest wykonywane w katalogu startowym. W zwiazku z akcja -exec wystepuja pewne nieuniknione zagrozenia zwiazane z bezpieczenstwem, nalezy zamiast niej uzywac -execdir. -exec polecenie {} + Ten wariant akcji -exec, wykonuje podane polecenie na wybranych plikach, lecz wiersz polecenia jest budowany przez dodawanie kazdej wybranej nazwy pliku na koncu - calkowita liczba wywolan polecenia bedzie znacznie mniejsza, niz liczba dopasowanych plikow. Wiersz polecenia jest budowany w ten sam sposob, w jaki xargs buduje swoj. W poleceniu dozwolone jest wystapienie jedynie jednych nawiasow "{}" i musi ono wystapic na koncu, zaraz przed "+"; trzeba je tez poprzedzic znakiem "\" lub zacytowac, aby ochronic przed interpretacja przez powloke. Polecenie jest wykonywane w katalogu poczatkowym. Jesli ktorekolwiek z wywolan w postaci "+" zwroci niezerowa wartosc jako status zakonczenia, find zwroci niezerowy status zakonczenia. Jesli find napotka na blad, moze on czasem spowodowac natychmiastowe wyjscie, zatem niektore oczekujace polecenia moga sie wcale nie uruchomic. Z tego powodu -exec moje-polecenie ... {} + -quit moze nie spowodowac faktycznego wykonania mojego-polecenia. Ten wariant -exec zawsze zwraca prawde. -execdir polecenie ; -execdir polecenie {} + Podobnie jak -exec, lecz podane polecenie jest uruchamiane z podkatalogu zawierajacego dopasowany plik, ktory nie jest zwykle tozsamy z katalogiem, w ktorym uruchomiono find. Podobnie jak przy -exec, trzeba zacytowac {}, jesli find jest wywolywany z powloki. Jest to o wiele bezpieczniejsza metoda wywolywania polecen, poniewaz zapobiega wyscigowi przy rozwiazywaniu sciezek do dopasowanych plikow. Podobnie jak przy akcji -exec, postac z "+" -execdir zbuduje wiersz polecen aby przetworzyc wiecej niz jeden dopasowany plik, lecz kazde dane wywolanie polecenia wypisze jedynie pliki, ktore istnieja w tym samym podkatalogu. Przy uzywaniu tej opcji, trzeba sie upewnic, ze zmienna srodowiskowa $PATH nie odnosi sie do "." - w takim wypadku atakujacy moglby uruchomic dowolne polecenie, przez pozostawienie pliku o odpowiedniej nazwie w katalogu, w ktorym zostanie uruchomione -execdir. To samo tyczy sie wpisow w $PATH, ktore sa puste lub nie sa bezwzgledna nazwa katalogu. Jesli ktorekolwiek z wywolan w postaci "+" zwroci niezerowa wartosc jako status zakonczenia, find zwroci niezerowy status zakonczenia. Jesli find napotka na blad, moze on czasem spowodowac natychmiastowe wyjscie, zatem niektore oczekujace polecenia moga sie wcale nie uruchomic. Wynik akcji zalezy od tego, czy uzyto wariantu + czy ;, bowiem -execdir polecenie {} + zawsze zwroci prawde, natomiast -execdir polecenie {} ; zwroci prawde tylko, jesli polecenie zwroci 0. -fls plik Prawda; podobne do -ls, lecz zapisuje do pliku jak -fprint. Plik wyjsciowy jest tworzony zawsze, nawet jesli wskazanie nigdy nie pasuje. W rozdziale NIETYPOWE NAZWY PLIKOW znajduja sie informacje nt. obslugi nietypowych nazw plikow. -fprint plik Prawdziwe; wypisuje pelna nazwe pliku do pliku. Jesli plik nie istnieje w czasie dzialania find, zostanie utworzony; jesli istnieje, zostanie obciety. Nazwy plikow /dev/stdout i /dev/stderr sa traktowane osobno; odnosza sie one odpowiednio do standardowego wyjscia i standardowego wyjscia bledow. Plik wyjsciowy jest tworzony zawsze, nawet jesli wskazanie nigdy nie pasuje. W rozdziale NIETYPOWE NAZWY PLIKOW znajduja sie informacje nt. obslugi nietypowych nazw plikow. -fprint0 plik Prawda; podobne do -print0, lecz zapisuje do pliku jak -fprint. Plik wyjsciowy jest tworzony zawsze, nawet jesli wskazanie nigdy nie pasuje. W rozdziale NIETYPOWE NAZWY PLIKOW znajduja sie informacje nt. obslugi nietypowych nazw plikow. -fprintf plik format Prawda; podobne do -printf, lecz zapisuje do pliku jak -fprint. Plik wyjsciowy jest tworzony zawsze, nawet jesli wskazanie nigdy nie pasuje. W rozdziale NIETYPOWE NAZWY PLIKOW znajduja sie informacje nt. obslugi nietypowych nazw plikow. -ls Prawdziwe; wypisuje plik biezacy w formacie ls -dils na standardowe wyjscie. Liczniki blokow sa 1K blokami, chyba ze ustawiono zmienna srodowiskowa POSIXLY_CORRECT, gdy uzywane beda 512-bajtowe bloki. W rozdziale NIETYPOWE NAZWY PLIKOW znajduja sie informacje nt. obslugi nietypowych nazw plikow. -ok polecenie ; Jak -exec, lecz najpierw pyta uzytkownika. Jesli sie on zgodzi - uruchamia polecenie. W przeciwnym wypadku jedynie zwraca falsz. Gdy polecenie jest uruchomione, standardowe wejscie jest przekierowane z /dev/null. Akcji nie mozna podac rownoczesnie z opcja -files0-from. Odpowiedz na pytanie jest dopasowywane do pary wyrazen regularnych, aby okreslic, czy jest pozytywna czy negatywna. Wyrazenie to jest pozyskiwane z systemu, jesli ustawiona jest zmienna srodowiskowa POSIXLY_CORRECT, a w przeciwnym wypadku - z katalogu tlumaczen komunikatow find. Jesli system nie posiada odpowiednich definicji, uzyta bedzie wlasna definicja finda. W kazdym przypadku, interpretacja wyrazenia regularnego bedzie zalezala od zmiennej srodowiskowej LC_CTYPE (klasy znakowe) i LC_COLLATE (przedzialy znakow i klasy rownowaznosci). -okdir polecenie ; Jak -execdir, lecz najpierw wyswietlane jest pytanie, podobnie jak przy -ok. Jesli uzytkownik nie zgodzi sie, zwraca jedynie falsz. Gdy polecenie jest uruchomione, jego standardowe wejscie jest przekierowane z /dev/null. Akcji tej nie mozna laczyc z opcja -files0-from. -print Prawdziwe; wypisuje pelna nazwe pliku na standardowe wyjscie razem ze znakiem nowego wiersza. Jesli wyjscie finda jest przekierowane za pomoca potoku do innego programu i istnieje choc najmniejsza mozliwosc, ze nazwa jednego z przeszukiwanych plikow moze zawierac znak nowego wiersza, nalezy sie powaznie zastanowic, czy lepszym wyjsciem nie bedzie skorzystanie z opcji -print0, zamiast -print. Rozdzial NIETYPOWE NAZWY PLIKOW zawiera informacje nt. obslugi nietypowych znakow. -print0 Prawdziwe; wypisuje pelna nazwe pliku na standardowe wyjscie. Za nazwa daje znak null (zamiast znaku nowego wiersza uzywanego przez -print. Umozliwia to poprawne wyswietlenie plikow, zawierajacych w nazwach znaki nowej linii w programach, przetwarzajacych wyjscie finda. Opcja ta odpowiada opcji -0 programu xargs. -printf format Prawdziwe; wypisuje format na standardowe wyjscie, interpretujac sekwencje specjalne "\" i dyrektywy "%". Szerokosci pol i precyzje moga byc podawane dokladnie jak w funkcji printf(3) z C. Prosze zauwazyc, ze wiele z pol jest wypisywanych jako %s, a nie jako %d - moze to oznaczac, ze flagi nie beda dzialac zgodnie z oczekiwaniami. Oznacza to rowniez, ze flaga "-" dziala (wymusza wyrownanie do lewej pol). W przeciwienstwie do -print, -printf nie dodaje znaku nowego wiersza do konca lancucha. Sekwencje specjalne i dyrektywy to: \a Dzwonek. \b Backspace. \c Wstrzymuje wypisywanie tego formatu i natychmiast wymiata wyjscie. \f Wysuw wiersza. \n Nowy wiersz. \r Powrot karetki. \t Tabulacja pozioma. \v Tabulacja pionowa. \0 ASCII NUL. \\ Literalny lewy ukosnik ("\"). \NNN Znak o kodzie ASCII NNN (osemkowo). "\", za ktorym nastepuje dowolny inny znak, jest traktowany jak zwykly znak, wiec sa wypisywane obydwa. %% Literalny znak procenta. %a Ostatni czas dostepu do pliku w formacie zwracanym przez funkcje ctime(3) C. %Ak Ostatni czas dostepu do pliku, w formacie okreslonym przez k, ktorym moze byc "@", lub dyrektywa dla funkcji C strftime(3). Niepelna liste mozliwych wartosci k wymieniono nizej. W dokumentacji strftime(3) zamieszczono pelna liste. Niektore ze znakow okreslajacych konwersje moga nie byc dostepne na wszystkich systemach z powodu roznic w implementacji funkcji bibliotecznej strftime(3). @ Sekundy od 1 stycznia, 1970, 00:00 GMT, z czescia ulamkowa. Pola czasowe: H godzina (00..23) I godzina (01..12) k godzina ( 0..23) l godzina ( 1..12) M minuta (00..59) p przetlumaczone AM lub PM r czas, 12-godzinny (gg:mm:ss) S Sekundy (00.00 .. 61.00). Jest tu czesc ulamkowa. 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 biezacej strefie czasowej (na ktora wplyw moze miec ustawiona zmienna srodowiskowa TZ). Pole sekundowe zawiera czesc ulamkowa. X lokalna reprezentacja czasu (G:M:S). Drugie pole zawiera czesc ulamkowa. Z strefa czasowa (np. EDT), lub nic jesli nie da sie jej okreslic Pola daty: a lokalny skrot nazwy tygodnia (nie..sob) A lokalna pelna nazwa tygodnia, zmiennej dlugosci (niedziela..sobota) b lokalna skrocona nazwa miesiaca (sty..gru) B lokalna pelna nazwa miesiaca, zmiennej dlugosci (styczen..grudzien) 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 kompatybilnosci, nie ma tu czesci ulamkowej w polu sekund. d dzien miesiaca (01..31) D data (mm/dd/rr) F data (rrrr-mm-dd) h to samo co b j dzien roku (001..366) m miesiac (01..12) U numer tygodnia w roku, z niedziela liczona jako pierwszy dzien tygodnia (00..53) w dzien tygodnia (0..6) W numer tygodnia w roku, liczac z poniedzialkiem, jako pierwszym dniem tygodnia (00..53) x lokalna reprezentacja daty (mm.dd.rrrr) y ostatnie dwie cyfry roku (00..99) Y rok (1970...) %b Wielkosc przestrzeni dysku, uzyta dla tego pliku w blokach 512-bajtowych. Poniewaz przestrzen dyskowa jest alokowana w wielokrotnosciach rozmiaru bloku systemu plikow, jest to zwykle wiecej niz %s/512, lecz moze byc to rowniez mniej, gdy plik jest tzw. plikiem rzadkim. %Bk Czas utworzenia pliku (ang. birth time), w formacie okreslonym przez k, ktory jest taki sam jak dla %A. Ta dyrektywa daje lancuch pusty, jesli dany system operacyjny lub system plikow nie obsluguja czasow utworzenia pliku. %c Ostatni czas zmiany statusu pliku, w formacie zwroconym przez funkcje ctime(3) z C. %Ck Ostatni czas zmiany statusu pliku w formacie okreslonym przez k, w taki sam sposob, jak dla %A. %d Glebokosc pliku w drzewie katalogowym; 0 oznacza plik bedacy punktem startowym. %D Numer urzadzenia, na ktorym istnieje plik (pole st_dev ze stat struct), dziesietnie. %f Wypisuje nazwe bazowa (ang. basename); nazwe pliku po usunieciu katalogow (pozostawiono ostatni element). W przypadku /, wynikiem jest "/". Przyklad pokazano w rozdziale PRZYKLADY. %F Rodzaj systemu plikow, na ktorym znajduje sie plik; wartosc ta moze byc uzywana do -fstype. %g Nazwa grupy pliku lub numeryczny GID, jesli grupa nie ma nazwy. %G Numeryczny GID pliku. %h Nazwa katalogu; poczatkowe katalogi z nazwy pliku (wszystkie, poza ostatnim elementem). Jesli nazwa pliku nie zawiera ukosnikow (poniewaz jest to katalog biezacy), to %h daje ".". W przypadku plikow, ktore same sa katalogi i zawieraja ukosnik (w tym /), %h rozwija sie do lancucha pustego. Przyklad pokazano w rozdziale PRZYKLADY. %H Punkt poczatkowy, pod ktorym plik zostal znaleziony. %i Numer i-wezla pliku (dziesietnie). %k Wielkosc przestrzeni dysku, uzyta dla tego pliku w blokach o wielkosci 1K bajtow. Poniewaz przestrzen dyskowa jest alokowana w wielokrotnosciach rozmiaru bloku systemu plikow, jest to zwykle wiecej niz %s/1024, lecz moze byc to rowniez mniej, gdy plik jest tzw. plikiem rzadkim. %l Obiekt dowiazania symbolicznego (pusty lancuch, jesli plik nie jest dowiazaniem symbolicznym). %m Bity praw pliku (osemkowo). Ta opcja korzysta z "tradycyjnych" liczb, uzywanych przez wiekszosc implementacji Uniksowych, lecz jesli dana, uzywana obecnie implementacja, wykorzystuje dziwna kolejnosc osemkowych bitow uprawnien, widoczna bedzie roznica pomiedzy prawami pliku i wynikiem %m. Zwykle chce sie tu uzyc poczatkowego zera i aby to zrobic nalezy skorzystac z flagi # (np. "%#m") %M Uprawnienia pliku (w postaci symbolicznej, jak w ls). Ta dyrektywa jest obslugiwana przez findutils 4.2.5 i pozniejsze. %n Liczba twardych dowiazan do pliku. %p Nazwa pliku. %P Nazwa pliku z usunieta nazwa punktu poczatkowego, dla ktorego ja znaleziono. %s Rozmiar pliku w bajtach. %S Rzadkosc (dziurawosc) pliku. Jest obliczana jako (ROZMIARBLOKU*st_blocks / st_size). Dokladna wartosc, jaka uzyska sie dla danego zwyklego pliku o okreslonej wielkosci, jest zalezna od systemu. Jednak pliki rzadkie beda mialy te wartosc zwykle mniejsza niz 1.0, a pliki uzywajace blokow posrednich moga miec wartosc wieksza niz 1.0. Liczba blokow uzytych przez plik zwykle zalezy od systemu plikow. Wartosc uzyta dla ROZMIARBLOKU zalezy od systemu, lecz najczesciej jest to 512. Jesli rozmiar bloku wynosi zero, wypisywana wartosc jest niezdefiniowana. W systemach nieobslugujacych st_blocks, rzadkosc pliku przyjmuje sie na 1.0. %t Ostatni czas modyfikacji pliku w formacie zwroconym przez funkcje ctime(3) z C. %Tk Ostatni czas modyfikacji pliku, w formacie okreslonym przez k, podobnie jak dla %A. %u Nazwa uzytkownika pliku, lub numeryczny UID, jesli uzytkownik nie ma nazwy. %U Numeryczny UID pliku. %y Typ pliku (podobnie jak w ls -l), "U" to typ nieznany (ang. unknown, nie powinien wystapic). %Y Typ pliku (jak %y), lecz podaza za dowiazaniami symbolicznymi: "L" to petla (ang. loop), "N" oznacza nieistniejacy, natomiast "?" wystapi dla kazdego innego bledu przy okreslaniu typu celu dowiazania symbolicznego. %Z (tylko SELinux) kontekst bezpieczenstwa pliku. %{ %[ %( Zarezerwowane na przyszlosc. Znak "%" po ktorym wystepuje dowolny inny znak jest ignorowany, lecz ten drugi znak jest wypisywany (nie nalezy na tym polegac, gdyz moga zostac wprowadzone nowe znaki formatu). Symbol "%" na koncu argumentu formatu skutkuje niezdefiniowanym zachowaniem, poniewaz brak jest nastepnego znaku. W niektorych ustawieniach regionalnych opcja ta moze ukryc klucz do domu, w innych usunac ostatnia stronice czytanej powiesci. Ostrzegalismy! Dyrektywy %m i %d obsluguja flagi #, 0 i +, lecz inne dyrektywy nie, nawet jesli wyswietlaja liczby. Do dyrektyw liczbowych, ktore nie obsluguja tych flag, naleza G, U, b, D, k i n. Flaga formatu "-" jest obslugiwana i zmienia wyrownanie pol z prawego (domyslnego) na lewy. Rozdzial NIETYPOWE NAZWY PLIKOW zawiera informacje nt. obslugi nietypowych nazw plikow. -prune Prawda; jesli plik jest katalogiem, nie zaglebia sie w niego. Jesli poda sie -depth, to -prune nie dziala. Poniewaz -delete wymusza -depth, nie da sie sensownie polaczyc -prune i -delete. Na przyklad, aby pominac katalog src/emacs i wszystkie jego pliki i katalogi oraz wypisac nazwy innych znalezionych plikow, prosze uzyc: find . -path ./src/emacs -prune -o -print -quit Natychmiast wychodzi (zwracajac wartosc zero, jesli nie wystapily bledy). Rozni sie to od -prune poniewaz -prune stosuje sie tylko do zawartosci przycietych katalogow, natomiast -quit po prostu od razu zatrzymuje find. Nie pozostana zadne dzialajace procesy potomne. Przed wyjsciem programu, zostana przywolane wiersze polecenia zbudowane za pomoca -exec ... + lub -execdir ... +. Po wykonaniu -quit, dalsze pliki podane w wierszu polecenia nie zostana przetworzone. Na przyklad "find /tmp/foo /tmp/bar -print -quit" wypisze tylko "/tmp/foo". Czestym zastosowaniem -quit jest zatrzymanie przeszukiwania systemu plikow po odnalezieniu tego, czego szukano. Na przyklad, aby znalezc pojedynczy plik, mozna podac: find / -name needle -print -quit OPERATORY Wymienione wedlug malejacego priorytetu: ( wyraz ) Wymusza pierwszenstwo. Poniewaz nawiasy sa znakami specjalnymi dla powloki, trzeba je zwykle cytowac. Wiele przykladow z niniejszej strony podrecznika uzywa do tego celu odwrotnych ukosnikow: "\(...\)" zamiast "(...)". ! wyraz Prawda, jesli wyraz jest falszywe. Znak ten zwykle wymaga rowniez ochrony przed interpretacja przez powloke. -not wyraz Jak ! wyraz, lecz nie jest zgodne z POSIX. wyraz1 wyraz2 Dwa wyrazenia z rzedu sa traktowane, jakby byly polaczone jawnym -a; wyraz2 nie jest analizowany jesli wyraz1 jest falszywe. wyraz1 -a wyraz2 To samo, co wyraz1 wyraz2. wyraz1 -and wyraz2 To samo, co wyraz1 wyraz2, lecz nie jest zgodne z POSIX. wyraz1 -o wyraz2 Lub ("or"); wyraz2 nie jest analizowane jesli wyraz1 jest prawdziwe. wyraz1 -or wyraz2 To samo, co wyraz1 -o wyraz2, lecz nie jest zgodne z POSIX. wyraz1 , wyraz2 Lista; zarowno wyraz1 jak i wyraz2 sa zawsze analizowane. Wartosc wyraz1 jest pomijana; wartoscia listy jest wartosc wyraz2. Operator w formie przecinka moze byc przydatny do wyszukiwania wielu roznych typow rzeczy, lecz przechodzac przez hierarchie systemu plikow tylko raz. Do wypisania roznych dopasowan do wielu roznych plikow wyjsciowych, mozna uzyc akcji -fprintf. Prosze zauwazyc, ze gdy -a zostanie podane niejawnie (np. przy dwoch testach bez okreslonego jawnie operatora miedzy nimi) lub jawnie, ma pierwszenstwo nad -o. Oznacza to, ze find . -name plik-a -o -name plik-b -print nigdy nie wypisze plik-a. NIETYPOWE NAZWY PLIKOW Wiele akcji find skutkuje wypisywaniem danych, bedacych pod kontrola innych uzytkownikow. Dotyczy to nazw plikow, rozmiarow, czasow modyfikacji itp. Nazwy plikow sa potencjalnym problemem, poniewaz moga zawierac dowolne znaki oprocz "\0" i "/". Nietypowe znaki w nazwach plikow moga robic nieoczekiwane i czesto nieprzewidywalne rzeczy z terminalem uzytkownika (np. zmieniac ustawienia klawiszy funkcyjnych niektorych terminali). Nietypowe znaki sa obslugiwane w rozny sposob, w zaleznosci od akcji, zgodnie z ponizszym opisem. -print0, -fprint0 Zawsze wypisuje dokladne nazwy plikow, niezmienione, nawet jesli wynik trafia na terminal -ls, -fls Nietypowe znaki sa zawsze cytowane. Biale znaki, odwrotny ukosnik i znak podwojnego cudzyslowu jest wypisywany za pomoca cytowania w stylu C (np \f lub \" ). Inne nietypowe znaki sa wypisywane za pomoca cytowania osemkowego. Inne znaki drukowalne (dla -ls i -fls sa to znaki pomiedzy osemkowym 041 i 0176) sa wypisywane bez zmian. -printf, -fprintf Jesli wynik nie trafia na terminal, nic nie jest zmieniane. W przeciwnym razie, wynik zalezy od uzywanej dyrektywy. Dyrektywy %D, %F, %g, %G, %H, %Y i %y sa rozwijane do wartosci, ktore nie sa pod kontrola wlascicieli plikow, sa wiec wypisywane bez zmian. Dyrektywy %a, %b, %c, %d, %i, %k, %m, %M, %n, %s, %t, %u i %U maja wartosci bedace pod kontrola wlascicieli plikow, lecz nie moga byc one uzyte do wyslania dowolnych danych na terminal, dlatego sa wypisywane bez zmian. Dyrektywy %f, %h, %l, %p i %P sa cytowane. Cytowanie jest wykonywane w ten sam sposob, jak w GNU ls. Nie jest to ten sam mechanizm, co uzywany przez -ls i -fls. Jesli mozna zdecydowac o formacie wyniku find lepiej jest zwykle skorzystac z "\0" jako ogranicznika, zamiast uzywac znaku nowego wiersza, poniewaz nazwy plikow moga zawierac biale znaki i znaki nowego wiersza. Ustawienie zmiennej srodowiskowej LC_CTYPE jest uzywane do okreslenia tego, ktore znaki maja byc cytowane. -print, -fprint Cytowanie jest obslugiwane w ten sam sposob co w -printf i -fprintf. Jesli uzywa sie find w skrypcie lub w sytuacji, gdzie dopasowywane pliki moga miec dowolne nazwy, powinno sie rozwazyc skorzystanie z -print0 zamiast z -print. Akcje -ok i -okdir wypisuja biezace nazwy plikow bez zmian. Moze sie to zmienic w kolejnych wydaniach. ZGODNOSC ZE STANDARDAMI W celu najscislejszej zgodnosci ze standardem POSIX, nalezy ustawic zmienna srodowiskowa POSIXLY_CORRECT. W standardzie POSIX (IEEE Std 1003.1-2008, 2016 Edition) okreslono nastepujace opcje: -H Opcja jest obslugiwana. -L Opcja jest obslugiwana. -name Opcja jest obslugiwana, lecz zgodnosc z POSIX zalezy od zgodnosci z POSIX systemowej funkcji bibliotecznej fnmatch(3). Od wersji findutils-4.2.2 metaznaki powloki (np. "*", "?", "[]") dopasuja poczatkowe ".", poniewaz wymaga tego interpretacja 126 IEEE PASC. Jest to zmiana w stosunku do poprzednich wersji findutils. -type Obslugiwane. POSIX okresla "b", "c", "d", "l", "p", "f" i "s". GNU find obsluguje rowniez "D", reprezentujace Door, w systemach, ktore to obsluguja. Co wiecej, GNU find umozliwia jednoczesne podanie wielu typow w liscie rozdzielonej przecinkiem. -ok Obslugiwane. Interpretacja odpowiedzi jest zgodna z wzorcami "yes" i "no" wybranymi przez ustawienie zmiennej srodowiskowej LC_MESSAGES. Gdy ustawiona jest zmienna srodowiskowa POSIXLY_CORRECT, wzorce te sa wziete z systemowych definicji odpowiedzi pozytywnej (yes) lub negatywnej (no). Prosze zapoznac sie z systemowa dokumentacja nl_langinfo(3), w szczegolnosci YESEXPR i NOEXPR. Gdy POSIXLY_CORRECT nie jest ustawiona, wzorce sa brane z wlasnego katalogu komunikatow find. -newer Obslugiwane. Jesli podany plik jest dowiazaniem symbolicznym, jest zawsze rozwiazywany. Jest to zmiana w stosunku do wczesniejszego zachowania, gdy odpowiedni czas byl brany z samego dowiazania; patrz ponizszy rozdzial HISTORIA. -perm Obslugiwane. Jesli zmienna srodowiskowa POSIXLY_CORRECT nie jest ustawiona, czesc argumentow trybu (np. +a+x), ktora nie jest prawidlowa w POSIX, jest obslugiwana w celu zachowania kompatybilnosci wstecznej. Inne wskazania Wszystkie wskazania: -atime, -ctime, -depth, -exec, -group, -links, -mtime, -nogroup, -nouser, -ok, -path, -print, -prune, -size, -user i -xdev sa obslugiwane. Standard POSIX okresla nawiasy "(", ")", negacje "!" i operatory logiczne ORAZ/LUB -a i -o. Wszystkie inne opcje, wskazania, wyrazenia itd. sa rozszerzeniami wykraczajacymi poza standard POSIX. Wiele z nich nie jest jednak unikalnych dla GNU find. Standard POSIX wymaga wykrywania przez find petli: Narzedzie find powinno wykrywac petle nieskonczone, tj. gdy wchodzi do wczesniej odwiedzonego katalogu, bedacego przodkiem pliku, ktory wystapil jako ostatni. Gdy petla nieskonczona jest wykrywana, find powinien wypisac informacje diagnostyczna na standardowe wyjscie bledow i powinien albo odzyskac swa pozycje w hierarchii albo wyjsc. GNU find jest zgodny z tymi wymaganiami. Liczba dowiazan katalogow zawierajacych wpisy bedace dowiazaniami zwyklymi (twardymi) do katalogu nadrzednego bedzie czesto nizsza, niz powinna byc. Oznacza to, ze GNU find czasami zoptymalizuje liczbe sprawdzen podkatalogow bedacych dowiazaniem do katalogu nadrzednego. Poniewaz find nie wchodzi w rzeczywistosci do kazdego podkatalogu, moze unikac wyswietlania komunikatu diagnostycznego. Choc to zachowanie moze byc niekiedy mylace, jest malo prawdopodobne, aby ktokolwiek na nim polegal. Jesli optymalizacja "lisciowa" (ang. leaf optimisation) zostanie wylaczona za pomoca -noleaf, wpis katalogu zostanie zawsze sprawdzony, a gdy to bedzie konieczne, zostanie wypisany komunikat diagnostyczny. Dowiazanie symboliczne nie moze byc uzyte do tworzenia podobnych cykli systemu plikow, lecz jesli dziala opcja -L lub -follow, komunikat diagnostyczny zostanie wypisany, gdy find natrafi na petle dowiazan symbolicznych. Podobnie jak w przypadku petli z dowiazaniami zwyklymi (twardymi), optymalizacja lisciowa czesto bedzie oznaczac, ze find wie, iz nie musi wywolywac stat() lub chdir() na dowiazaniu symbolicznym, wiec taka diagnostyka czesto nie jest konieczna. Opcja -d jest obslugiwana w celu kompatybilnosci z roznymi systemami BSD, lecz powinno sie w zamian uzywac zgodna z POSIX opcje -depth. Zmienna srodowiskowa POSIXLY_CORRECT nie wplywa na zachowanie testow -regex ani -iregex, poniewaz opcje te nie sa okreslone w standardzie POSIX. ZMIENNE SRODOWISKOWE LANG Dostarcza domyslna wartosc do zmiennych dotyczacych umiedzynarodowienia, ktore nie sa ustawione lub sa puste. LC_ALL Jesli jest ustawiona na niepusty lancuch, przeslania wartosc wszystkich innych zmiennych dotyczacych umiedzynarodowienia. LC_COLLATE Standard POSIX okresla, ze ta zmienna wplywa na dopasowanie wzorcow uzywanych przez opcje -name. GNU find uzywa funkcji bibliotecznej fnmatch(3), w zwiazku z tym obsluga LC_COLLATE zalezy od biblioteki systemowej. Zmienna ta wplywa rowniez na interpretacje odpowiedzi na -ok - podczas gdy zmienna LC_MESSAGES wybiera rzeczywisty wzorzec uzywany do interpretacji odpowiedzi na -ok, interpretacja wyrazen klamrowych we wzorcu bedzie zalezna od LC_COLLATE. LC_CTYPE Zmienna wplywa na traktowanie klas znakow uzywanych w wyrazeniach regularnych, jak rowniez w tescie -name, jesli obsluguje to systemowa funkcja biblioteczna fnmatch(3). Zmienna wplywa rowniez na interpretacje klas znakowych w wyrazeniach regularnych uzywanych do interpretacji odpowiedzi na pytanie wydane przez -ok. Zmienna srodowiskowa LC_CTYPE wplywa rowniez na to, ktore znaki sa uwazane za niedrukowalne przy wypisywaniu nazw plikow; patrz rozdzial NIETYPOWE NAZWY PLIKOW. LC_MESSAGES Okresla jezyk (lokale) komunikatow. Jesli ustawiona jest zmienna srodowiskowa POSIXLY_CORRECT, to okresla rowniez interpretacje na odpowiedz na pytanie zadane przez akcje -ok. NLSPATH Okresla lokalizacje katalogow z przetlumaczonymi komunikatami. PATH Wplywa na katalogi, ktore sa przeszukiwane przez find w celu wykonania plikow wywolanych przez -exec, -execdir, -ok i -okdir. POSIXLY_CORRECT Okresla rozmiar bloku uzywany przez -ls i -fls. Jesli ustawiona jest zmienna POSIXLY_CORRECT, bloki maja po 512 bajtow. W przeciwnym wypadku - 1024 bajtow. Ustawienie tej zmiennej domyslnie wylacza rowniez ostrzezenia (tzn. implikuje -nowarn), poniewaz niezaleznie od wyniku -ok, POSIX wymaga aby wszystkie komunikaty wypisywane na standardowe wyjscie bledow byly diagnostyczne i wynikal z nich niezerowy kod zakonczenia. Gdy POSIXLY_CORRECT nie jest ustawiona, -perm +zzz jest traktowane jak -perm /zzz jesli +zzz nie jest prawidlowym trybem symbolicznym. Gdy POSIXLY_CORRECT jest ustawiona, takie konstrukcje sa traktowane jako blad. Gdy POSIXLY_CORRECT jest ustawiona, odpowiedz na pytanie zadane przez akcje -ok jest interpretowane zgodnie z katalogiem systemowym wiadomosci, a nie zgodnie z wlasnymi tlumaczeniami komunikatow programu find. TZ Wplywa na strefe czasowa uzywana przez czesc zwiazanych z czasem dyrektyw formatu opcji -printf i -fprintf. PRZYKLADY Prostsze podejscie "find|xargs" o Znajduje pliki o nazwie core w lub ponizej katalogu /tmp i usuwa je. $ find /tmp -name core -type f -print | xargs /bin/rm -f Prosze zauwazyc, ze przyklad nie bedzie dzialal poprawnie, jesli w ktorejs z nazw sa znaki nowego wiersza, pojedyncze lub podwojne cudzyslowy lub spacje. Bezpieczniejsze podejscie "find -print0 | xargs -0" o Znajduje pliki o nazwie core w lub ponizej katalogu /tmp i usuwa je, przetwarzajac nazwy plikow w ten sposob, ze nazwy zawierajace pojedyncze lub podwojne cudzyslowy, spacji lub znaki nowego wiersza sa obslugiwane poprawnie. $ find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f Test -name jest wykonywany przed testem -type, aby zapobiec wywolywaniu stat(2) na kazdym pliku. Prosze zauwazyc, ze pomiedzy momentem, gdy find przechodzi przez drzewo wypisujac pasujace nazwy plikow, a momentem, gdy proces wykonywany przez xargs pracuje z tym plikiem, wciaz wystepuje wyscig. Przetwarzanie dowolnych punktow poczatkowych o Zakladajac, ze inny program proggy filtruje wstepnie i tworzy duza liste plikow rozdzielonych znakiem NUL, przetwarza je na punkty poczatkowe i znajduje posrod nich wszystkie zwykle, puste pliki: $ proggy | find -files0-from - -maxdepth 0 -type f -empty Uzycie `-files0-from -` oznacza, ze nazwy punktow poczatkowych sa odczytywane ze standardowego wejscie tj. z potoku; -maxdepth 0 zapewnia, ze sprawdzane sa tylko jawnie podane wpisy, bez zaglebiania sie w katalogi (gdyby jeden z punktow poczatkowych takim byl). Wykonywanie polecenia dla kazdego pliku o Uruchamia file na kazdym pliku w lub ponizej katalogu biezacego. $ find . -type f -exec plik '{}' \; Prosze zwrocic uwage, ze nawiasy klamrowe sa ujete w pojedyncze cudzyslowy, aby ochronic je przed interpretacje przez interpunkcje skryptow powloki. Srednik jest rowniez chroniony, przez odwrotny ukosnik, choc pojedyncze cudzyslowy bylyby rownie dobre. Ze wzgledu na wydajnosc i bezpieczenstwo w wielu przypadkach preferowana moze byc skladnia `-exec ... +` albo nawet lepiej `-execdir ... +`. Przechodzenie przez system plikow jednokrotnie - wykonujac 2 rozne akcje o Przeszukuje system plikow jeden raz, wypisujac pliki i katalogi z set-user-ID do pliku /root/suid.txt, a duze 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' \) Przyklad ten uzywa znaku kontynuacji wiersza "\" w pierwszych dwoch wierszach, by poinstruowac powloke, aby kontynuowala odczytywanie polecenia z nastepnego wiersza. Wyszukiwanie plikow wedlug wieku o Wyszukuje pliki w katalogu domowym uzytkownika, ktore zostaly zmodyfikowane w ciagu ostatnich 24 godzin. $ find $HOME -mtime 0 To polecenie dziala w ten sposob, poniewaz czas od ostatniej modyfikacji pliku jest podzielony przez 24 godziny, a reszta jest odrzucana. Oznacza to, ze aby pasowac do -mtime 0, plik musial byc zmodyfikowany mniej niz 24 godziny temu. Wyszukiwanie plikow wedlug uprawnien o Wyszukuje pliki wykonywalne, lecz nieodczytywalne. $ find /sbin /usr/sbin -executable \! -readable -print o Wyszukuje pliki posiadajace prawa odczytu i zapisu dla wlasciciela i grupy, ktore dla innych sa odczytywalne, lecz nie sa zapisywalne. $ find . -perm 664 Pliki, ktore spelniaja te kryteria lecz maja ustawione inne bity praw (np. wykonywalnosci) nie sa dopasowane. o Wyszukuje pliki posiadajace prawa odczytu i zapisu dla wlasciciela i grupy, ktore dla innych sa odczytywalne, bez wzgledu na obecnosc jakichs dodatkowych bitow praw (np. bitu wykonywalnosci). $ find . -perm -664 Dopasowany bedzie tez np. plik z trybem 0777. o Wyszukuje pliki, ktore sa przez kogos zapisywalne (dla ich wlasciciela, grupy lub innych). $ find . -perm /222 o Wyszukuje pliki, ktore sa przez zapisywalne dla ich wlasciciela lub dla ich grupy. $ find . -perm /220 $ find . -perm /u+w,g+w $ find . -perm /u=w,g=w Wszystkie trzy polecenia wykonuja to samo, lecz pierwsze uzywa reprezentacji osemkowej praw likow, a pozostale dwa - postaci symbolicznej. Pliki nie musza byc zapisywalne zarowno przez wlasciciela jak i grupe, aby zostac dopasowane; wystarczy spelnic jeden warunek. o Wyszukuje pliki, ktore sa zapisywalne dla ich wlasciciela oraz dla ich grupy. $ find . -perm -220 $ find . -perm -g+w,u+w Oba te polecenia robia to samo. o Bardziej skomplikowane przeszukiwanie uprawnien. $ find . -perm -444 -perm /222 \! -perm /111 $ find . -perm -a+r -perm /a+w \! -perm /a+x Oba polecenia wyszukuja pliki odczytywalne dla wszystkich (-perm -444 lub -perm -a+r), majace ustawiony co najmniej jeden bit zapisu (-perm /222 lub -perm /a+w), lecz nie bedace wykonywalne dla kogokolwiek (odpowiednio ! -perm /111 lub ! -perm /a+x). Wycinanie - pomijanie plikow i podkatalogow o Polecenie to kopiuje zawartosc /source-dir do /dest-dir, lecz pomija pliki lub katalogi o nazwach .snapshot (i wszystko wewnatrz ich). Pomija rowniez pliki lub katalogi o nazwach konczacych sie na "~", lecz nie ich zawartosc. $ cd /source-dir $ find . -name .snapshot -prune -o \( \! -name '*~' -print0 \) \ | cpio -pmd0 /dest-dir Konstrukcja -prune -o \( ... -print0 \) jest dosc czesta. Pomysl jest taki, ze wyrazenie przed -prune dopasowuje rzeczy, ktore maja byc wyciete. Jednak sama akcja -prune zwraca prawde, wiec kolejna -o upewnia sie, ze prawa strona jest obliczana tylko dla niewycietych katalogow (zawartosc wycinanych katalogow nie jest nawet sprawdzana, wiec ich zawartosc jest nieistotna). Wyrazenie po prawej stronie -o, znajduje sie w nawiasach jedynie dla przejrzystosci. Podkresla, ze akcja -print0 ma miejsce jedynie do rzeczy, do ktorych nie zastosowano -prune. Poniewaz domyslna zaleznosc "and" (i) jest scislejsza niz -o, tak jest domyslnie, lecz nawiasy pomagaja pokazac o co chodzi. o Podajac nastepujacy katalog projektu i powiazany katalog administracyjny SCM, wykonuje wydajne wyszukiwanie korzeni projektow: $ find repo/ \ \( -exec test -d '{}/.svn' \; \ -or -exec test -d '{}/.git' \; \ -or -exec test -d '{}/CVS' \; \ \) -print -prune Przykladowe wyjscie: repo/project1/CVS repo/gnu/project2/.svn repo/gnu/project3/.svn repo/gnu/project3/src/.svn repo/project4/.git W tym przykladzie, -prune zapobiega niepotrzebnemu zaglebianiu sie w juz odkryte katalogi (np. nie szuka sie w project3/src, poniewaz znaleziono juz project3/.svn), lecz znajduje katalogi sasiednie (project2 i project3). Inne przydatne przyklady o Wyszukiwanie roznych typow plikow. $ find /tmp -type f,d,l Wyszukuje pliki, katalogi i dowiazania symboliczne w katalogu /tmp, przetwarzajac te typy jako liste rozdzielona przecinkiem (rozszerzenie GNU), co jest odpowiednikiem dluzszego, lecz bardziej przenosnego: $ find /tmp \( -type f -o -type d -o -type l \) o Wyszukuje pliki o podanej nazwie needle i zatrzymuje natychmiast po znalezieniu pierwszego z nich. $ find / -name needle -print -quit o Pokazuje interpretacje dyrektyw formatu %f i %h akcji -printf dla pewnych skrajnych przypadkow. Oto przyklad 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 ZAKONCZENIA find wychodzi ze statusem 0, gdy pomyslnie przetworzono wszystkie pliki i wiekszym niz 0, gdy wystapil blad. Jest to bardzo ogolny opis, lecz gdy zwracana wartoscia nie jest zero, nie powinno sie po prostu polegac na poprawnosci wynikow find. Jesli wystapi jakis blad, find moze sie natychmiast zatrzymac, bez ukonczenia wszystkich podanych akcji. Przykladowo, mogly nie zostac sprawdzone pewne punkty poczatkowe lub oczekujace wywolania programu dla -exec ... {} + lub -execdir ... {} + mogly nie zostac wykonane. HISTORIA Program find pojawil sie w 5 wersji Uniksa, jako czesc projektu Programmer's Workbench i zostal napisany przez Dicka Haighta. A Research UNIX Reader: Annotated Excerpts from the Programmer's Manual, 1971-1986 autorstwa Douga McIlroya opisuje pewne dodatkowe szczegoly, mozna przeczytac go pod adresem . GNU find zostal pierwotnie napisany przez Erica Deckera, z ulepszeniami autorstwa Davida MacKenziego, Jaya Pletta i Tima Wooda. Pomysl find -print0 i xargs -0 pochodzi od Dana Bernsteina. ZGODNOSC Od findutils-4.2.2, metaznaki powloki (np. "*", "?" lub "[]") uzywane we wzorcach nazw plikow dopasuja poczatkowe ".", poniewaz wymaga tego interpretacja 126 IEEE POSIX. Od findutils-4.3.3, -perm /000 dopasowuje wszystkie pliki, zamiast zadnego. W findutils-4.3.3 zaimplementowano nanosekundowa rozdzielczosc znacznikow czasu. Od findutils-4.3.11, akcja -delete ustawia kod zakonczenia find na wartosc niezerowa, jesli sie nie powiedzie. find nie wyjdzie jednak od razu. Wczesniej, kod zakonczenia find nie zmienial sie pod wplywem niepowodzenia -delete. Funkcja Dodana w Pojawia sie tez 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 Skladnia -perm +TRYB zostala usunieta w findutils-4.5.12 na korzysc -perm /TRYB. Skladnia +TRYB byla uznawana za przestarzala od findutils findutils-4.2.21, wydanego w 2005 r. TO NIE SA BLEDY Zaskakujaca kolejnosc operatorow Polecenie find . -name plik-a -o -name plik-b -print nigdy nie wypisze plik-a, poniewaz faktycznie odpowiada ono find . -name plik-a -o \( -name plik-b -a -print \). Prosze pamietac, ze -a ma pierwszenstwo przed -o, a gdy nie poda sie operatora miedzy testami, przyjmowane jest -a. Blad ,,sciezki musza poprzedzac wyrazenie" $ find . -name *.c -print find: sciezki musza poprzedzac wyrazenie find: czyzby nie zacytowany wzorzec po wyrazeniu `-name'? Zdarza sie to, gdy powloka moglaby rozwinac wzorzec *.c do wiecej niz jednej nazwy istniejacej w biezacym katalogu, a przekazanie wynikowych nazw plikow w wierszu polecenia do find wygladaloby tak: find . -name frcode.c locate.c word_io.c -print Takie polecenie oczywiscie nie zadziala, poniewaz wskazanie -name pozwala na podanie tylko pojedynczego wzorca jako argumentu. Zamiast robienia tego w ten sposob, nalezy ujac wzorzec w cudzyslowy lub zacytowac wieloznacznik, w sposob pozwalajac programowi find na uzycie wzorca z wieloznacznikiem przy wyszukiwaniu pasujacej nazwy pliku, zamiast pozwalac na interpretowanie go przez powloke nadrzedna: $ find . -name '*.c' -print $ find . -name \*.c -print USTERKI Wystepuja pewne zagrozenia zwiazane z bezpieczenstwem, bedace wynikiem tego, co standard POSIX przewiduje dla find - dlatego nie moga byc naprawione. Na przyklad akcja -exec jest niebezpieczna i powinno sie uzywac w zamian -execdir. Zmienna srodowiskowa LC_COLLATE nie ma wplywu na akcje -ok. ZGLASZANIE BLEDOW Strona internetowa z pomoca GNU findutils: O bledach tlumaczenia programu prosimy poinformowac przez Wszelkie inne problemy prosimy zglaszac za pomoca systemu sledzenia bledow GNU Savannah: Do ogolnej dyskusji na tematy zwiazane z pakietem GNU findutils sluzy lista dyskusyjna bug-findutils: PRAWA AUTORSKIE Copyright (C) 1990-2024 Free Software Foundation, Inc. Licencja GPLv3+: GNU GPL w wersji 3 lub pozniejszej . Jest to wolne oprogramowanie: mozna je zmieniac i rozpowszechniac. Nie ma ZADNEJ GWARANCJI, w granicach okreslonych przez prawo. ZOBACZ TAKZE 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) Pelna dokumentacja: albo dostepna lokalnie przez: info find TLUMACZENIE Tlumaczenie niniejszej strony podrecznika: Przemek Borys i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . FIND(1)