FIND(1) | General Commands Manual | FIND(1) |
NAZWA¶
find - szuka plików w hierarchii katalogowejSKŁADNIA¶
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point...] [expression]OPIS¶
This manual page documents the GNU version of find. GNU find searches the directory tree rooted at each given starting-point by evaluating the given expression from left to right, according to the rules of precedence (see section OPERATORS), until the outcome is known (the left hand side is false for and operations, true for or), at which point find moves on to the next file name. If no starting-point is specified, `.' is assumed.W przypadku używania find w środowisku, w którym istotne jest bezpieczeństwo (np. przy przeszukiwaniu katalogów, które są zapisywalne dla innych użytkowników), należy zapoznać się z rozdziałem "Security Considerations" w dokumentacji findutils, pod nazwą Finding Files. Dokument ten (w języku angielskim) jest bardziej szczegółowy i opisowy niż niniejsza strona podręcznika systemowego, więc może okazać się przydatniejszym źródłem informacji.
OPCJE¶
Opcje -H, -L i -P kontrolują sposób traktowania dowiązań symbolicznych. Kolejne argumenty wiersza poleceń powinny być plikami lub katalogami do przeszukania, aż do pierwszego argumentu rozpoczynającego się znakiem "-" albo argumentu "(" lub "!". Argumenty te (razem z następnymi) są rozpoznawane jako wyrażenie opisujące to, co ma zostać przeszukane. Jeśli nie zostanie podana ścieżka, użyty będzie bieżący katalog. W przypadku braku wyrażenia, używane jest domyślne wyrażenie -print (lecz wówczas i tak zapewne lepsze byłoby skorzystanie z -print0).Niniejsza strona podręcznika opisuje "opcje" w liście wyrażeń. Opcje te kontrolują zachowanie find, lecz są podane zaraz za ostatnią nazwą ścieżkową. Z kolei pięć "prawdziwych" opcji (-H, -L, -P, -D i -O) musi pojawić się przed ścieżką, oczywiście jeśli okażą się potrzebne. Podwójny dywiz -- może posłużyć do zasygnalizowania, że pozostałe argumenty nie są opcjami (choć jeśli w liście punktów startowych używa się masek, bezpieczniej jest zwykle poprzedzić je wszystkie "./" lub "/").
- -P
- Nigdy nie podąża za dowiązaniami symbolicznymi. Jest to zachowanie domyślne. Gdy find sprawdza lub wypisuje informacje o pliku, 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.
- When the -L option is in effect, the -type predicate will always match against the type of the file that a symbolic link points to rather than the link itself (unless the symbolic link is broken). Actions that can cause symbolic links to become broken while find is executing (for example -delete) can give rise to confusing behaviour. Using -L causes the -lname and -ilname predicates always to return false.
- -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 dotczy 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
- Show diagnostic information relating to -exec, -execdir, -ok and -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
- Navigate the directory tree verbosely.
- 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
- Enable all of the other debug options (but 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
- Any -type or -xtype tests are performed after any tests based only on the names of files, but before any tests that require information from the inode. On many modern versions of Unix, file types are returned by readdir() and so these predicates are faster to evaluate than predicates which need to stat the file first. If you use the -fstype FOO predicate and specify a filesystem type FOO which is not known (that is, present in `/etc/mtab') at the time find starts, that predicate is equivalent to -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.
EXPRESSION¶
The part of the command line after the list of starting points is the expression. This is a kind of query specification describing how we match files and what we do with the files that were matched. An expression is composed of a sequence of things:- Tests
- Tests return a true or false value, usually on the basis of some property of a file we are considering. The -empty test for example is true only when the current file is empty.
- Actions
- Actions have side effects (such as printing something on the standard output) and return either true or false, usually based on whether or not they are successful. The -print action for example prints the name of the current file on the standard output.
- Global options
- Global options affect the operation of tests and actions specified on any part of the command line. Global options always return true. The -depth option for example makes find traverse the file system in a depth-first order.
- Positional options
- Positional options affect only tests or actions which follow them. Positional options always return true. The -regextype option for example is positional, specifying the regular expression dialect for regular expressions occurring later on the command line.
- Operators
- Operators join together the other items within the expression. They include for example -o (meaning logical OR) and -a (meaning logical AND). Where an operator is missing, -a is assumed.
If the whole expression contains no actions other than -prune or -print, -print is performed on all files for which the whole expression is true.
The -delete action also acts like an option (since it implies -depth).
POSITIONAL OPTIONS¶
Positional options always return true. They affect only tests occurring later on the command line.- -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
- Changes the regular expression syntax understood by -regex and -iregex tests which occur later on the command line. To see which regular expression types are known, use -regextype help. The Texinfo documentation (see SEE ALSO) explains the meaning of and differences between the various types of regular expression.
- -warn, -nowarn
- Turn warning messages on or off. These warnings apply only to the command line usage, not to any conditions that find might encounter when it searches directories. The default behaviour corresponds to -warn if standard input is a tty, and to -nowarn otherwise. If a warning message relating to command-line usage is produced, the exit status of find is not affected. If the POSIXLY_CORRECT environment variable is set, and -warn is also used, it is not specified which, if any, warnings will be active.
GLOBAL OPTIONS¶
Global options always return true. Global options take effect even for tests which occur earlier on the command line. To prevent confusion, global options should specified on the command-line after the list of start points, just before the first test, positional option or action. If you specify a global option in some other place, find will issue a warning message explaining that this can be confusing.The global options occur after the list of start points, and so are not the same kind of option as -L, for example.
- -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.
- -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ą).
Furthermore, find with the -ignore_readdir_race option will ignore errors of the -delete action in the case the file has disappeared since the parent directory was read: it will not output an error diagnostic, and the return code of the -delete action will be true.
- -maxdepth głębokość
- Descend at most levels (a non-negative integer) levels of directories below the starting-points. -maxdepth 0 means only apply the tests and actions to the starting-points themselves.
- -mindepth głębokość
- Do not apply any tests or actions at levels less than levels (a non-negative integer). -mindepth 1 means process all files except the starting-points.
- -mount
- Nie zagłębia się w katalogi na innych systemach plików. Jest to alternatywna nazwa dla -xdev, stworzona dla zgodności z innymi wersjami find.
- -noignore_readdir_race
- Wyłącza efekt opcji -ignore_readdir_race.
- -noleaf
- Zakazuje optymalizacji wykonywanej przez zakładanie, że katalogi zawierają o dwa podkatalogi mniej niż ich licznik dowiązań zwykłych (twardych). Opcja ta jest wymagana podczas przeszukiwania systemów plików, które nie używają uniksowej konwencji wiązania katalogów, takich jak systemy plików CD-ROM, MS-DOS czy wolumeny AFS. Każdy katalog w normalnym systemie uniksowym zawiera przynajmniej dwa twarde dowiązania: jego nazwę i ".". Dodatkowo, jego podkatalogi będą do niego dowiązane za pomocą ".." każdy. Gdy find testuje katalog po zbadaniu funkcją stat o 2 mniej podkatalogów niż licznik dowiązań, wie, że reszta wpisów jest niekatalogowa (są to "liście" - "leaf" w drzewie katalogów). Jeśli testowane mają być tylko nazwy plików, to nie ma potrzeby ich sprawdzać; daje to znaczące przyspieszenie.
- -version, --version
- Wypisuje wersję i kończy pracę.
- -xdev
- Nie zagłębia się w katalogi na innych systemach plików.
TESTY¶
Niektóre testy np. -newerXY i -samefile pozwalają na porównanie pomiędzy aktualnie sprawdzanym plikiem i plikiem odniesienia podanym w wierszu polecenia. Gdy te testy są używane, interpretacja pliku odniesienia zależy od opcji -H, -L i -P i podanej wcześniej -follow, lecz plik odniesienia jest sprawdzany tylko raz, przy przetwarzaniu wiersza polecenia. Jeśli plik odniesienia nie może zostać sprawdzony (np. wywołanie systemowe stat(2) nie powiedzie się na nim), wyświetlany jest błąd, a find wychodzi z niezerowym kodem zakończenia.Wartości numeryczne mogą być podawane jako
- +n
- dla większych niż n,
- -n
- dla mniejszych niż n,
- n
- dla równych n.
- -amin n
- Dostęp do pliku nastąpił ostatnio n minut temu.
- -anewer plik
- Do pliku ostatnio dostano się wcześniej niż plik został zmodyfikowany. Jeśli plik jest dowiązaniem i działa jedna z opcji -L lub -H, to używany jest zawsze czas dostępu pliku, na który wskazuje dowiązanie.
- -atime n
- Dostęp do pliku miał miejsce 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 n minut temu.
- -cnewer plik
- Status pliku był ostatnio zmieniony wcześniej niż zmodyfikowano plik. Jeśli plik jest dowiązaniem i działa jedna z opcji -L lub -H, to używany jest zawsze czas modyfikacji pliku, na który wskazuje dowiązanie.
- -ctime n
- Status pliku został zmieniony 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
- Matches files which are executable and directories which are searchable (in a file name resolution sense) by the current user. This takes into account access control lists and other permissions artefacts which the -perm test ignores. This test makes use of the access(2) system call, and so can be fooled by NFS servers which do UID mapping (or root-squashing), since many systems implement access(2) in the client's kernel and so cannot make use of the UID mapping information held on the server. Because this test is based only on the result of the access(2) system call, there is no guarantee that a file for which this test succeeds can actually be executed.
- -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 to 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
- Like -name, but the match is case insensitive. For example, the patterns `fo*' and `F??' match the file names `Foo', `FOO', `foo', `fOo', etc. The pattern `*foo*` will also match a file called '.foobar'.
- -inum n
- Plik ma numer i-węzła 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
- File has n hard links.
- -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 n minut temu.
- -mtime n
- Dane pliku zostały ostatnio zmodyfikowane 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
- Base of file name (the path with the leading directories removed) matches shell pattern pattern. Because the leading directories are removed, the file names considered for a match with -name will never include a slash, so `-name a/b' will never match anything (you probably need to use -path instead). A warning is issued if you try to do this, unless the environment variable POSIXLY_CORRECT is set. The metacharacters (`*', `?', and `[]') match a `.' at the start of the base name (this is a change in findutils-4.2.2; see section STANDARDS CONFORMANCE below). To ignore a directory and the files under it, use -prune; see an example in the description of -path. Braces are not recognised as being special, despite the fact that some shells including Bash imbue braces with a special meaning in shell patterns. The filename matching is performed with the use of the fnmatch(3) library function. Don't forget to enclose the pattern in quotes in order to protect it from expansion by the shell.
- -newer plik
- Plik został zmodyfikowany później niż plik. Jeśli plik jest dowiązaniem symbolicznym i działają opcje -H lub -L, to używany jest zawsze czas modyfikacji pliku, na który wskazuje dowiązanie.
- -newerXY odniesienie
- Succeeds if timestamp X of the file being considered is newer than
timestamp Y of the file reference. The letters X and
Y can be any of the following letters:
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 katalogowy o nazwie "./src/misc" (jeśli taki istnieje). Aby zignorować całe drzewo katalogowe, proszę użyć -prune, zamiast sprawdzać każdy plik w drzewie. 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
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 compares the -path argument with the concatenation of a directory name and the base name of the file it's examining. Since the concatenation will never end with a slash, -path arguments ending in a slash will match nothing (except perhaps a start point specified on the command line). The predicate -path is also supported by HP-UX find and is part of the POSIX 2008 standard. - -perm prawa
- File's permission bits are exactly mode (octal or symbolic). Since an exact match is required, if you want to use this form for symbolic modes, you may have to specify a rather complex mode string. For example `-perm g=w' will only match files which have mode 0020 (that is, ones for which group write permission is the only permission set). It is more likely that you will want to use the `/' or `-' forms, for example `-perm -g=w', which matches any file with group write permission. See the EXAMPLES section for some illustrative examples.
- -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
- This is no longer supported (and has been deprecated since 2005). Use -perm /mode instead.
- -readable
- Matches files which are readable by the current user. This takes into account access control lists and other permissions artefacts which the -perm test ignores. This test makes use of the access(2) system call, and so can be fooled by NFS servers which do UID mapping (or root-squashing), since many systems implement access(2) in the client's kernel and so cannot make use of the UID mapping information held on the server.
- -regex wzorzec
- File name matches regular expression pattern. This is a match on the whole path, not a search. For example, to match a file named `./fubar3', you can use the regular expression `.*bar.' or `.*b.*3', but not `f.*r3'. The regular expressions understood by find are by default Emacs Regular Expressions (except that `.' matches newline), but this can be changed with the -regextype option.
- -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]
- File uses n units of space, rounding up. The following suffixes can be used:
- b
- bloki 512-bajtowe (wartość domyślna, gdy nie użyto przyrostka)
- c
- bajty
- w
- słowa dwubajtowe
- k
- for kibibytes (KiB, units of 1024 bytes)
- M
- for mebibytes (MiB, units of 1024 * 1024 = 1048576 bytes)
- G
- for gibibytes (GiB, units of 1024 * 1024 * 1024 = 1073741824 bytes)
- The size is simply the st_size member of the struct stat populated by the lstat (or stat) system call, rounded up as shown above. In other words, it's consistent with the result you get for ls -l. Bear in mind that the `%k' and `%b' format specifiers of -printf handle sparse files differently. The `b' suffix always denotes 512-byte blocks and never 1024-byte blocks, which is different to the behaviour of -ls.
- The + and - prefixes signify greater than and less than, as usual; i.e., an exact size of n units does not match. Bear in mind that the size is rounded up to the next unit. Therefore -size -1M is not equivalent to -size -1048576c. The former only matches empty files, the latter matches files from 0 to 1,048,575 bytes.
- -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
- łącze nazwane (FIFO, ang. pipe)
- f
- zwykły plik (ang. file)
- 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 (ang. socket)
- D
- door (Solaris)
- To search for more than one type at once, you can supply the combined list of type letters separated by a comma `,' (GNU extension).
- -uid n
- Numeryczny UID pliku to n.
- -used n
- Do pliku ostatnio dostano się 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
- Matches files which are writable by the current user. This takes into account access control lists and other permissions artefacts which the -perm test ignores. This test makes use of the access(2) system call, and so can be fooled by NFS servers which do UID mapping (or root-squashing), since many systems implement access(2) in the client's kernel and so cannot make use of the UID mapping information held on the server.
- -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.
- -context wzorzec
- (SELinux only) Security context of the file matches glob pattern.
AKCJE¶
- -delete
- Usuwa pliki; prawdziwe gdy usunięcie powiedzie się.
Jeśli nie, to wypisywany jest błąd. Jeśli
-delete zawiedzie, kod zakończenia find będzie
niezerowy (gdy program ostatecznie się zakończy).
Użycie -delete automatycznie włącza
opcję -depth.
Ostrzeżenie: Proszę nie zapomnieć, że wiersz poleceń find jest wykonywany jako wyrażenie, więc umieszczenie -delete jako pierwszego spowoduje próbę usunięcie wszystkiego poniżej podanych punktów początkowych. Podczas testowania wiersza polecenia find, którą chce się później użyć z -delete, proszę podać bezpośrednio -depth, aby uniknąć późniejszych niespodzianek. Ponieważ -delete implikuje -depth, to nie da się użyć -prune i -delete w sposób przydatny.
Together with the -ignore_readdir_race option, find will ignore errors of the -delete action in the case the file has disappeared since the parent directory was read: it will not output an error diagnostic, and the return code of the -delete action will be true.
- -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 {} +
- This variant of the -exec action runs the specified command on the selected files, but the command line is built by appending each selected file name at the end; the total number of invocations of the command will be much less than the number of matched files. The command line is built in much the same way that xargs builds its command lines. Only one instance of `{}' is allowed within the command, and (when find is being invoked from a shell) it should be quoted (for example, '{}') to protect it from interpretation by shells. The command is executed in the starting directory. If any invocation with the `+' form returns a non-zero value as exit status, then find returns a non-zero exit status. If find encounters an error, this can sometimes cause an immediate exit, so some pending commands may not be run at all. This variant of -exec always returns true.
- -execdir polecenie ;
- -execdir polecenie {} +
- Like -exec, but the specified command is run from the subdirectory containing the matched file, which is not normally the directory in which you started find. As with -exec, the {} should be quoted if find is being invoked from a shell. This a much more secure method for invoking commands, as it avoids race conditions during resolution of the paths to the matched files. As with the -exec action, the `+' form of -execdir will build a command line to process more than one matched file, but any given invocation of command will only list files that exist in the same subdirectory. If you use this option, you must ensure that your $PATH environment variable does not reference `.'; otherwise, an attacker can run any commands they like by leaving an appropriately-named file in a directory in which you will run -execdir. The same applies to having entries in $PATH which are empty or which are not absolute directory names. If any invocation with the `+' form returns a non-zero value as exit status, then find returns a non-zero exit status. If find encounters an error, this can sometimes cause an immediate exit, so some pending commands may not be run at all. The result of the action depends on whether the + or the ; variant is being used; -execdir command {} + always returns true, while -execdir command {} ; returns true only if command returns 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, kiedy 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.
- 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.
- 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; wypisje 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" 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" 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". Możliwe wartości k są wymienione niżej; niektóre z nich mogą nie być dostępne na wszystkich systemach z powodu różnic w "strftime" między systemami.
- @
- 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
- locale's time representation (H:M:S). The seconds field includes a fractional part.
- 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)
- 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.
- %c
- Ostatni czas zmiany statusu pliku, w formacie zwróconym przez funkcję "ctime" z C.
- %Ck
- Ostatni czas zmiany statusu pliku w formacie określonym przez k, w taki sam sposób, jak dla %A.
- %d
- File's depth in the directory tree; 0 means the file is a starting-point.
- %D
- Numer urządzenia, na którym istnieje plik (pole st_dev ze stat struct), dziesiętnie.
- %f
- Nazwa pliku z usuniętymi początkowymi katalogami (tylko ostatni element nazwy).
- %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
- 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 ".".
- %H
- Starting-point under which file was found.
- %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
- File's name with the name of the starting-point under which it was found removed.
- %s
- Rozmiar pliku w bajtach.
- %S
- File's sparseness. This is calculated as (BLOCKSIZE*st_blocks / st_size). The exact value you will get for an ordinary file of a certain length is system-dependent. However, normally sparse files will have values less than 1.0, and files which use indirect blocks may have a value which is greater than 1.0. In general the number of blocks used by a file is file system dependent. The value used for BLOCKSIZE is system-dependent, but is usually 512 bytes. If the file size is zero, the value printed is undefined. On systems which lack support for st_blocks, a file's sparseness is assumed to be 1.0.
- %t
- Ostatni czas modyfikacji pliku w formacie zwróconym przez funkcję "ctime" 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
- File's type (like %y), plus follow symlinks: `L'=loop, `N'=nonexistent, `?' for any other error when determining the type of the symlink target.
- %Z
- (SELinux only) file's security context.
- %{ %[ %(
- Reserved for future use.
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 podano -depth - fałsz, brak działania. Ponieważ -delete implikuje -depth, nie da się użyć -prune i -delete łącznie.
- -quit
- Natychmiast wychodzi. Nie są pozostawiane żadne działające procesy potomne, lecz nie będzie przetworzone więcej ścieżek podanych w wierszu poleceń. Przykładowo, find /tmp/foo /tmp/bar -print -quit wypisze jedynie /tmp/foo. Wiersze polecenia zbudowane za pomocą -execdir ... () + zostaną wywołane przed zakończeniem find. Kod zakończenia może wynosi zero lub nie, w zależności od tego, czy wystąpił dotychczas błąd.
OPERATORY¶
Wymienione według malejącego priorytetu:- ( wyraż )
- Wymusza pierwszeństwo. Ponieważ nawiasy są znakami specjalnymi dla powłoki, trzeba je zwykle cytować. Wiele przykładów z niniejszej strony podręcznika używa do tego celu odwrotnych ukośników: "\(...\)" zamiast "(...)".
- ! wyraż
- Prawda, jeśli wyraż jest fałszywe. Znak ten zwykle wymaga również ochrony przed interpretacją przez powłokę.
- -not wyraż
- Jak ! wyraż, lecz nie jest zgodne z POSIX.
- wyraż1 wyraż2
- Two expressions in a row are taken to be joined with an implied -a; expr2 is not evaluated if expr1 is false.
- 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.
Please note that -a when specified implicitly (for example by two tests appearing without an explicit operator between them) or explicitly has higher precedence than -o. This means that find . -name afile -o -name bfile -print will never print afile.
NIETYPOWE NAZWY PLIKÓW¶
Wiele akcji find skutkuje wypisywaniem danych, będących pod kontrolą innych użytkowników. Dotyczy to nazw plików, rozmiarów, czasów modyfikacji itp. Nazwy plików są potencjalnym problemem, ponieważ mogą zawierać dowolne znaki oprócz "\0" i "/". Nietypowe znaki w nazwach plików mogą robić nieoczekiwane i często nieprzewidywalne rzeczy z terminalem użytkownika (np. zmieniać ustawienia klawiszy funkcyjnych niektórych terminali). Nietypowe znaki są obsługiwane w różny sposób, w zależności od akcji, zgodnie z poniższym opisem.- -print0, -fprint0
- Zawsze wypisuje dokładne nazwy plików, niezmienione, nawet jeśli wynik trafia na terminal
- -ls, -fls
- Nietypowe znaki są zawsze cytowane. Białe znaki, odwrotny ukośnik i znak podwójnego cudzysłowu jest wypisywany za pomocą cytowania w stylu C (np \f lub \" ). Inne nietypowe znaki są wypisywane za pomocą cytowania ósemkowego. Inne znaki drukowalne (dla -ls i -fls są to znaki pomiędzy ósemkowym 041 i 0176) są wypisywane bez zmian.
- -printf, -fprintf
- Jeśli wynik nie trafia na terminal, nic nie jest zmieniane. W przeciwnym razie, wynik zależy od używanej dyrektywy. Dyrektywy %D, %F, %g, %G, %H, %Y i %y są rozwijane do wartości, które nie są pod kontrolą właścicieli plików, są więc wypisywane bez zmian. Dyrektywy %a, %b, %c, %d, %i, %k, %m, %M, %n, %s, %t, %u i %U mają wartości będące pod kontrolą właścicieli plików, lecz nie mogą być one użyte do wysłania dowolnych danych na terminal, dlatego są wypisywane bez zmian. Dyrektywy %f, %h, %l, %p i %P są cytowane. Cytowanie jest wykonywane w ten sam sposób, jak w GNU ls. Nie jest to ten sam mechanizm, co używany przez -ls i -fls. Jeśli można zdecydować o formacie wyniku find lepiej jest zwykle skorzystać z "\0" jako ogranicznika, zamiast używać znaku nowego wiersza, ponieważ nazwy plików mogą zawierać białe znaki i znaki nowego wiersza. Ustawienie zmiennej środowiskowej "LC_CTYPE" jest używane do określenia tego, które znaki mają być cytowane.
- -print, -fprint
- Cytowanie jest obsługiwane w ten sam sposób co w -printf i -fprintf. Jeśli używa się find w skrypcie lub w sytuacji, gdzie dopasowywane pliki mogą mieć dowolne nazwy, powinno się rozważyć skorzystanie z -print0 zamiast z -print.
Akcje -ok i -okdir wypisują bieżące nazwy plików bez zmian. Może się to zmienić w kolejnych wydaniach.
ZGODNOŚĆ ZE STANDARDAMI¶
W celu najściślejszej zgodności ze standardem POSIX, należy ustawić zmienną środowiskową POSIXLY_CORRECT. W standardzie POSIX (IEEE Std 1003.1-2008, 2016 Edition) określono następujące opcje:- -H
- Opcja jest obsługiwana.
- -L
- Opcja jest obsługiwana.
- -name
- Opcja jest obsługiwana, lecz zgodność z POSIX zależy od zgodności z POSIX systemowej funkcji bibliotecznej fnmatch(3). Od wersji findutils-4.2.2 metaznaki powłoki (np. "*", "?", "[]") dopasują początkowe ".", ponieważ wymaga tego interpretacja 126 IEEE PASC. Jest to zmiana w stosunku do poprzednich wersji findutils.
- -type
- Supported. POSIX specifies `b', `c', `d', `l', `p', `f' and `s'. GNU find also supports `D', representing a Door, where the OS provides these. Furthermore, GNU find allows multiple types to be specified at once in a comma-separated list.
- -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.
- Other primaries
- The primaries -atime, -ctime, -depth, -exec, -group, -links, -mtime, -nogroup, -nouser, -ok, -path, -print, -prune, -size, -user and -xdev are all supported.
Standard POSIX określa nawiasy "(", ")", negację "!" i operatory "and" oraz "or" (-a, -o).
Wszystkie inne opcje, wskazania, wyrażenia itd. są rozszerzeniami wykraczającymi poza standard POSIX. Wiele z nich nie jest jednak unikalnych dla GNU find.
Standard POSIX wymaga wykrywania przez find pętli:
- Narzędzie find powinno wykrywać pętle nieskończone, tj. gdy wchodzi do wcześniej odwiedzonego katalogu, będącego przodkiem pliku, który wystąpił jako ostatni. Gdy pętla nieskończona jest wykrywana, find powinien wypisać informację diagnostyczną na standardowe wyjście błędów i powinien albo odzyskać swą pozycję w hierarchii albo wyjść.
GNU find jest zgodny z tymi wymaganiami. Liczba dowiązań katalogów zawierających wpisy będące dowiązaniami zwykłymi (twardymi) do katalogu nadrzędnego będzie często niższa, niż powinna być. Oznacza to, że GNU find czasami zoptymalizuje liczbę sprawdzeń podkatalogów będących dowiązaniem do katalogu nadrzędnego. Ponieważ find nie wchodzi w rzeczywistości do każdego podkatalogu, może unikać wyświetlania komunikatu diagnostycznego. Choć to zachowanie może być niekiedy mylące, jest mało prawdopodobne, aby ktokolwiek na nim polegał. Jeśli optymalizacja "liściowa" (ang. leaf optimisation) zostanie wyłączona za pomocą -noleaf, wpis katalogu zostanie zawsze sprawdzony, a gdy to będzie konieczne, zostanie wypisany komunikat diagnostyczny. Dowiązanie symboliczne nie może być użyte do tworzenia podobnych cykli systemu plików, lecz jeśli działa opcja -L lub -follow, komunikat diagnostyczny zostanie wypisany, gdy find natrafi na pętlę dowiązań symbolicznych. Podobnie jak w przypadku pętli z dowiązaniami zwykłymi (twardymi), optymalizacja liściowa często będzie oznaczać, że find wie, iż nie musi wywoływać stat() lub chdir() na dowiązaniu symbolicznym, więc taka diagnostyka często nie jest konieczna.
Opcja -d jest obsługiwana w celu kompatybilności z różnymi systemami BSD, lecz powinno się w zamian używać zgodną z POSIX opcję -depth.
Zmienna środowiskowa POSIXLY_CORRECT nie wpływa na zachowanie testów -regex ani -iregex, ponieważ opcje te nie są określone w standardzie POSIX.
ZMIENNE ŚRODOWISKOWE¶
- LANG
- Dostarcza domyślną wartość do zmiennych dotyczących umiędzynarodowienia, które nie są ustawione lub są puste.
- LC_ALL
- Jeśli jest ustawiona na niepusty łańcuch, przesłania wartość wszystkich innych zmiennych dotyczących umiędzynarodowienia.
- LC_COLLATE
- Standard POSIX określa, że ta zmienna wpływa na dopasowanie wzorców używanych przez opcję -name. GNU find używa funkcji bibliotecznej fnmatch(3), w związku z tym obsługa niniejszej zmiennej zależy od biblioteki systemowej. Zmienna ta wpływa również na interpretację odpowiedzi na -ok - podczas gdy zmienna "LC_MESSAGES" wybiera rzeczywisty wzorzec używany do interpretacji odpowiedzi na -ok, interpretacja wyrażeń klamrowych we wzorcu będzie zależna od "LC_COLLATE"
- LC_CTYPE
- Zmienna wpływa na traktowanie klas znaków używanych w wyrażeniach regularnych, jak również w teście -name, jeśli obsługuje to systemowa funkcja biblioteczna fnmatch(3). Zmienna wpływa również na interpretację klas znakowych w wyrażeniach regularnych używanych do interpretacji odpowiedzi na pytanie wydane przez -ok. Zmienna środowiskowa "LC_CTYPE" wpływa również na to, które znaki są uważane za niedrukowalne przy wypisywaniu nazw plików; patrz rozdział NIETYPOWE NAZWY PLIKÓW.
- LC_MESSAGES
- Określa język (lokale) komunikatów. Jeśli ustawiona jest zmienna środowiskowa "POSIXLY_CORRECT", to określa również interpretację na odpowiedź na pytanie zadane przez akcję -ok.
- NLSPATH
- Określa lokalizację katalogów z przetłumaczonymi komunikatami.
- PATH
- Wpływa na katalogi, które są przeszukiwane przez find w celu wykonania plików wywołanych przez -exec, -execdir, -ok i -okdir.
- POSIXLY_CORRECT
- Określa rozmiar bloku używany przez -ls i -fls. Jeśli ustawiona jest zmienna POSIXLY_CORRECT, bloki mają po 512 bajtów. W przeciwnym wypadku - 1024 bajtów.
- Ustawienie tej zmiennej domyślnie wyłącza również ostrzeżenia (tzn. implikuje -nowarn), ponieważ niezależnie od wyniku -ok, POSIX wymaga aby wszystkie komunikaty wypisywane na standardowe wyjście błędów były diagnostyczne i wynikał z nich niezerowy kod zakończenia.
- Gdy POSIXLY_CORRECT nie jest ustawiona, -perm +zzz jest traktowane jak -perm /zzz jeśli +zzz nie jest prawidłowym trybem symbolicznym. Gdy POSIXLY_CORRECT jest ustawiona, takie konstrukcje są traktowane jako błąd.
- Gdy POSIXLY_CORRECT jest ustawiona, odpowiedź na pytanie zadane przez akcję -ok jest interpretowane zgodnie z katalogiem systemowym wiadomości, a nie zgodnie z własnymi tłumaczeniami komunikatów programu find.
- TZ
- Wpływa na strefę czasową używaną przez część związanych z czasem dyrektyw formatu opcji -printf i -fprintf.
PRZYKŁADY¶
find /tmp -name core -type f -print | xargs /bin/rm -fZnajduje pliki o nazwie core w lub poniżej katalogu /tmp i usuwa je. 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.
find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f
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. Test -name jest wykonywany przez
-type, aby zapobiec wywoływaniu stat(2) na
każdym pliku.
find . -type f -exec file '{}' \;Uruchamia "file" na każdym pliku w lub poniżej katalogu bieżącego. 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.
find / \( -perm -4000 -fprintf /root/suid.txt '%#m %u %p\n' \) , \ \( -size +100M -fprintf /root/big.txt '%-10s %p\n' \)Przeszukuje system plików jeden raz, wypisując pliki i katalogi z setuid do pliku /root/suid.txt, a duże pliki do /root/big.txt.
find $HOME -mtime 0Wyszukuje pliki w katalogu domowym użytkownika, które zostały zmodyfikowane w ciągu ostatnich 24 godzin. 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.
find /sbin /usr/sbin -executable \! -readable -printWyszukuje pliki wykonywalne, lecz nieodczytywalne.
find . -perm 664Wyszukuje pliki posiadające prawa odczytu i zapisu dla właściciela i grupy, które dla innych są odczytywalne, lecz nie są zapisywalne. Pliki, które spełniają te kryteria lecz mają ustawione inne bity praw (np. wykonywalności) nie są dopasowane.
find . -perm -664Wyszukuje 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). Dopasowany będzie też np. plik z trybem 0777.
find . -perm /222Wyszukuje pliki, które są przez kogoś zapisywalne (dla ich właściciela, grupy lub innych).
find . -perm /220 find . -perm /u+w,g+w find . -perm /u=w,g=wWszystkie trzy polecenia wykonują to samo, lecz pierwsze używa reprezentacji ósemkowej praw lików, a pozostałe dwa - postaci symbolicznej. Wszystkie polecenia wyszukują pliki, które są zapisywalne albo przez ich właściciela, albo grupę. Pliki nie muszą być zapisywalne zarówno przez właściciela jak i grupę, aby zostać dopasowane; wystarczy spełnić jeden warunek.
find . -perm -220 find . -perm -g+w,u+wOba polecenia robią to samo: wyszukują pliki będące zapisywalne zarówno dla ich właściciela jak i grupy.
find . -perm -444 -perm /222 \! -perm /111 find . -perm -a+r -perm /a+w \! -perm /a+xOba 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 i ! -perm /a+x).
cd /source-dir find . -name .snapshot -prune -o \( \! -name '*~' -print0 \)| cpio -pmd0 /dest-dirPolecenie 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ść. 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.
find repo/ \( -exec test -d '{}'/.svn \; -or \ -exec test -d {}/.git \; -or -exec test -d {}/CVS \; \) \ -print -prune
Podając następujący katalog projektu i powiązany katalog administracyjny SCM, wykonuje wydajne wyszukiwanie korzeni projektów:
repo/project1/CVS repo/gnu/project2/.svn repo/gnu/project3/.svn repo/gnu/project3/src/.svn repo/project4/.gitW 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).
find /tmp -type f,d,l
Search for files, directories, and symbolic links in the directory /tmp passing these types as a comma-separated list (GNU extension), which is otherwise equivalent to the longer, yet more portable:
find /tmp \( -type f -o -type d -o -type l \)
KOD ZAKOŃCZENIA¶
find wychodzi ze statusem 0, gdy pomyślnie przetworzono wszystkie pliki i większym niż 0, gdy wystąpił błąd. Jest to bardzo ogólny opis, lecz gdy zwracaną wartością nie jest zero, nie powinno się po prostu polegać na poprawności wyników find.When some error occurs, find may stop immediately, without completing all the actions specified. For example, some starting points may not have been examined or some pending program invocations for -exec ... {} + or -execdir ... {} + may not have been performed.
ZOBACZ TAKŻE¶
locate(1), locatedb(5), updatedb(1), xargs(1), chmod(1), fnmatch(3), regex(7), stat(2), lstat(2), ls(1), printf(3), strftime(3), ctime(3)The full documentation for find is maintained as a Texinfo manual. If the info and find programs are properly installed at your site, the command info find should give you access to the complete manual.
HISTORIA¶
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 |
-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 |
The syntax -perm +MODE was removed in findutils-4.5.12, in favour of -perm /MODE. The +MODE syntax had been deprecated since findutils-4.2.21 which was released in 2005.
TO NIE SĄ BŁĘDY¶
Operator precedence surprises¶
The command find . -name afile -o -name bfile -print will never print afile because this is actually equivalent to find . -name afile -o \( -name bfile -a -print \). Remember that the precedence of -a is higher than that of -o and when there is no operator specified between tests, -a is assumed.“paths must precede expression” error message¶
$ find . -name *.c -print find: paths must precede expression find: possible unquoted pattern after predicate `-name'?
This happens when the shell could expand the pattern *.c to more than one file name existing in the current directory, and passing the resulting file names in the command line to find like this:
find . -name frcode.c locate.c word_io.c -printThat command is of course not going to work, because the -name predicate allows exactly only one pattern as argument. Instead of doing things this way, you should enclose the pattern in quotes or escape the wildcard, thus allowing find to use the pattern with the wildcard during the search for file name matching instead of file names expanded by the parent shell:
$ find . -name '*.c' -print $ find . -name \*.c -print
PRAWA AUTORSKIE¶
Copyright © 1990-2019 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <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.
BŁĘDY¶
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. Proszę zapoznać się z Finding Files, aby dowiedzieć się więcej.Zmienna środowiskowa LC_COLLATE nie ma wpływu na akcję -ok.
Najlepszą drogą do zgłoszenia błędu jest użycie formularza na stronie https://savannah.gnu.org/bugs/?group=findutils. Możliwe jest wówczas śledzenie postępu naprawiania błędu. Pozostałe komentarze dotyczące find(1) i ogólnie, nt. pakietu findutils, można wysyłać na listę dyskusyjną bug-findutils. Aby się na nią zapisać, proszę wysłać list elektroniczny na adres bug-findutils-request@gnu.org.
TŁUMACZENIE¶
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: 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 manpages-pl-list@lists.sourceforge.net.