FIND(1)

НАЗВА
find — пошук файлів в ієрархії каталогів

КОРОТКИЙ ОПИС
find [-H] [-L] [-P] [-D параметри_діагностики] [-Oрівень] [початкова_точка...] [вираз]

ОПИС
Цю сторінку підручника присвячено опису версії GNU find. GNU find виконує пошук в ієрархії каталогів з коренем у кожній із вказаних початкових точок з обробкою вказаного виразу зліва праворуч, відповідно до правил пріоритетності (див. розділ ОПЕРАТОРИ), доки результат не стане відомим (ліва частина рівності стане хибною для операторів І, істинним для АБО), і отже, find перейде до наступної назви файла. Якщо не буде вказано початкової точки, буде використано «.».

Якщо ви користуєтеся find у середовищі, де важливою є безпека (наприклад, якщо ви користуєтеся програмою для пошуку у каталогах, які є придатними до запису для інших користувачів), вам слід прочитати главу «Міркування безпеки» у документації з findutils, яка має назву Finding Files і постачається з findutils. У тому документі наведено багато подробиць та обговорення питань, які не висвітлено на цій сторінці підручника, тому, можливо, він стане для вас кориснішим джерелом інформації.

ПАРАМЕТРИ
Параметри -H, -L і -P керують обробкою символічних посилань. Аргументи командного рядка після цих параметрів вважаються назвами файлів та каталогів, які слід використати, аж до першого аргументу, запис якого починається з «-», або аргументу «(» чи «!». Цей аргумент та усі наступні аргументи вважатимуться виразами, які визначають, що саме слід знайти. Якщо не вказано шлях, буде використано поточний каталог. Якщо не вказано виразу, буде використано вираз -print (втім, ймовірно, вам все одно варто скористатися замість нього -print0).

На цій сторінці підручника описано «параметри» у списку виразів. Ці параметри керують поведінкою find, але їх вказують одразу після останнього запису шляху. П'ять «справжніх» параметрів -H, -L, -P, -D і -O слід вказувати перед першим записом шляху, якщо у цьому є потреба. Теоретично, можна скористатися подвійним дефісом --, щоб вказати, що решта аргументів не є параметрами, але, насправді, це не працює через спосіб, у який find визначає кінець аргументів після шляху: програма робить це читанням, аж до аргументу виразу (який також починається з «-»). Тепер, якщо аргумент шляху починається із «-», find вважатиме його аргументом виразу. Отже, щоб забезпечити врахування усіх початкових точок, і, особливо, щоб запобігти розгортанню взірців із символами-замінниками викликом командної оболонки із помилковою обробкою їх як аргументів виразу, загалом безпечніше додати перед символами замінниками або сумнівними шляхами із «./» або скористатися абсолютними шляхами, що починаються з «/». Крім того, загалом безпечніше, хоча це і шкодить універсальності коду, скористатися параметром GNU -files0-from, щоб передавати довільні початкові точки у find.

-P  Ніколи не переходити за символічними посиланнями. Це типова поведінка. Коли find інспектує та виводить дані щодо файлів, і файл є символічним посиланням, використані дані стосуватимуться властивостей самого символічного посилання.

-L  Переходити за символічними посиланнями. При вивченні find відомостей щодо файлів і виведенні їх, відомості буде взято з властивостей файла, на який вказує посилання, а не з властивостей самого посилання (якщо це коректне посилання і find може інспектувати файл, на який вказує посилання). Використання цього параметра неявним чином встановлює -noleaf. Якщо ви далі скористаєтеся параметром -P, -noleaf продовжить діяти. Якщо діє -L, і find виявить символічне посилання на підкаталог під час пошуку, буде виконано пошук у підкаталозі, на який вказує символічне посилання.

    Якщо вказано параметр -L, ключ -type завжди застосовуватиметься до типу файла, на який посилається символічне посилання, а не до самого посилання (якщо символічне посилання є коректним). Дії, які можуть спричинити втрату чинності символічними посиланнями під час роботи find (наприклад, -delete), спричиняють некоректну поведінку програми. Використання -L спричиняє те, що ключі -lname і -ilname завжди повертають логічну хибність.

-H  Не переходити за символічними посиланнями, окрім періоду обробки аргументів командного рядка. Коли find інспектує або виводить відомості щодо файлів, має бути використано відомості щодо властивостей самого символічного посилання. Єдиним виключенням з цього правила є випадок, коли заданий у рядку команди файл є символічним посиланням і джерело посилання може бути визначено. У цьому випадку використані відомості буде визначено за тим, на що посилається посилання (тобто, буде здійснено перехід за посиланням). Відомості щодо самого файла посилання використовуються як резервні, якщо не вдасться виконати інспектування файла, на який посилається посилання. Якщо використано -H, і одним зі шляхів, які вказано у рядку команди є символічне посилання на каталог, буде інспектовано вміст цього каталогу (хоча, звичайно, -maxdepth 0 може скасувати таке інспектування).

Якщо вказано декілька параметрів з набору -H, -L і -P, кожен з них перевизначає інші; до уваги буде взято лише останній з цих параметрів у рядку команди. Оскільки це типова поведінка, слід вважати, що чинним є параметр -P, якщо не вказано параметра -H або -L.

GNU find часто читає статистичні дані щодо файлів під час опрацювання самого командного рядка, перед тим, як почався пошук. Ці параметри також впливають на обробку аргументів. Зокрема, є декілька перевірок, що порівнюють файли, вказані у рядку команди, з еталонним файлом. В кожному випадку, файл, вказаний у командному рядку, буде інспектовано зі збереженням деяких його властивостей. Якщо вказаний файл є символічним посиланням, і параметр -P є активним (або не було вказано ні -H, ні -L), інформація вжита для порівняння буде взята з символічного посилання. Інакше, її буде взято з файла, на який вказує посилання. Якщо find не може перейти за посиланням (наприклад, оскільки немає достатньо прав або посилання вказує на файл, якого не існує) буде використано властивості самого посилання.

Коли параметри -H або -L є активними, будь-які символічні посилання в аргументах до -newer будуть розіменовані, і позначки часу будуть взяті з файла, на який вказує посилання. Те саме стосується -newerXY, -anewer і -cnewer.

Параметр -follow дає результат, схожий на результат застосування параметра -L, але впливає там, де його застосовано (тобто, якщо не вказано -L, а -follow вказано, будь-які символічні посилання, які вказано після -follow у рядку команди буде розіменовано, а ті, що були до нього - ні).

-D debugopts
    Друкувати діагностичну інформацію; це може допомагати діагностувати проблеми із тим, чому find не робить те, що ви хочете. Параметри у списку параметрів діагностики має бути відокремлено пробілами. Сумісність параметрів діагностики між випусками findutils не гарантовано. Повний список параметрів діагностики можна побачити у виводі find -D help. Серед чинних параметрів діагностики такі:

    exec
        Вивести діагностичні відомості щодо -exec, -execdir, -ok і -okdir

    opt Виводить діагностичні відомості, пов'язані із оптимізацією ієрархії виразів; див. параметр -O.

    rates
        Виводить резюме, яке повідомляє, наскільки часто було успішно чи неуспішно застосовано ключ.

    search
        Докладні повідомлення щодо навігації ієрархією каталогів.

    stat
        Виводити повідомлення при інспектуванні файлів за допомогою системних викликів stat і lstat. Програма find намагається мінімізувати кількість таких викликів.

    tree
        Вивести ієрархію виразів у її початковій та оптимізованій формах.

    all Увімкнути усі інші діагностичні параметри (окрім help).

    help
        Вивести пояснення щодо діагностичних параметрів.

-Olevel
    Вмикає оптимізацію запиту. Програма find змінює порядок перевірок, щоб пришвидшити виконання, зберігаючи загальний результат; тобто ключ з побічними ефектами не міняють місця відносно один одного. Оптимізація виконується в кожному рівні оптимізації, як вказано далі.

    0   Еквівалент рівня оптимізації 1.

    1   Це типовий рівень оптимізації й відповідає традиційній поведінці. Вирази перевпорядковуються так, що перевірки, які засновано лише на назвах файлів (наприклад, -name та -regex) буде виконано першими.

    2   Будь-які перевірки -type і -xtype буде виконано після перевірок, які засновано на назвах файлів, але перед іншими перевірками, для яких потрібні дані з inode. На багатьох сучасних версіях Unix, тип файла, повернений readdir(), а отже, ці ключі можна обчислити швидше, ніж ключі, для яких слід спочатку отримати статистичні дані щодо файла. Якщо ви використовуєте ключ -fstype ЩОСЬ і вказуєте файлову систему ЩОСЬ, яка є невідомою (тобто її немає в `/etc/mtab') на момент запуску find, цей ключ є еквівалентним до -false.

    3   На цьому рівні оптимізації буде увімкнено повноцінний оптимізатор запитів на основі обчислювальної вартості. Порядок перевірок буде змінено так, щоб першими було виконано дешеві (тобто швидкі) перевірки, а вартісніші перевірки було виконано пізніше, якщо це потрібно. У кожній смузі вартостей ключі буде визначено раніше або пізніше на основі ймовірності того, що вони виявляться відповідними. Для -o ключі, які ймовірніше виявляться відповідними буде обчислено раніше, а для -a раніше буде обчислено ключі, які, ймовірно, виявляться невідповідними.

    У засобі оптимізації на основі вартості реалізовано фіксований алгоритм визначення того, наскільки ймовірним є встановлення відповідності у заданій перевірці. У деяких випадках при обчисленні ймовірності береться до уваги природа перевірки (наприклад, зроблено припущення, що перевірку -type f буде пройдено з більшою ймовірністю, ніж -type c). Зараз розробники оцінюють, чи варто лишати засіб оптимізації на основі вартості. Якщо він не збільшить швидкодію find, його знову буде прибрано. І навпаки, оптимізації, які є надійними, стійкими та ефективними з часом може бути увімкнено на нижчих рівнях оптимізації. Втім, немає намірів змінити типову поведінка (тобто рівень оптимізації 1) у послідовності випусків 4.3.x. Комплект тестів findutils виконує перевірку find на усіх рівнях оптимізації і забезпечує однакові результати для кожного з них.

    Зміна порядку операцій, які виконує оптимізатор на основі витрат, може призвести до видимих ​​для користувача змін у поведінці. Наприклад, предикати -readable і -empty чутливі до зміни порядку. Якщо вони виконуються в порядку -empty -readable, для непридатних до читання каталогів буде видано повідомлення про помилку. Якщо вони виконуються в порядку -readable -empty, повідомлення про помилку не буде видано. Ось чому таке перевпорядкування операцій не виконується на типовому рівні оптимізації.

ВИРАЗ
Частина рядка команди після списку початкових точок є виразом. Це тип специфікації запитів, який описує, які файли є відповідними та те, що слід зробити з відповідними файлами. Вираз складається з такої послідовності елементів:

Перевірки
    Перевірки повертають значення істинності або хибності, зазвичай, на основі певних властивостей інспектованого файла. Наприклад, перевірка -empty повертає значення істинності, лише якщо поточний файл є порожнім.

Дії Дії мають побіжні ефекти (зокрема виведення якихось даних до стандартного виведення) і повертають або істинність або хибність, залежно від того, чи вдало їх було виконано. Наприклад, дія -print виводить до стандартного виведення назву поточного файла.

Загальні параметри
    Загальні параметри впливають на роботу перевірок і дій, які вказано у будь-якій частині рядка команди. Загальні параметри завжди повертають істинність. Наприклад, параметр -depth наказує find обходити файлову систему на одиничну глибину.

Позиційні параметри
    Позиційні параметри впливають лише на перевірки або дії, які вказано у команді після них. Позиційні параметри завжди повертають істинність. Наприклад, параметр -regextype є позиційним, він визначає діалект формальних виразів для формальних виразів, які вказано у рядку команди після нього.

Оператори
    Оператори поєднують між собою інші елементи у виразі. Прикладами параметрів є -o (означає логічне АБО) та -a (означає логічне І). Там, де оператор не вказано, програма припускатиме -a.

Дію -print буде виконано для усіх файлів, для яких обчислення усього виразу дає істинність, якщо у ньому не міститься дії, окрім -prune або -quit. Дії, які забороняють виконання типової дії -print: -delete, -exec, -execdir, -ok, -okdir, -fls, -fprint, -fprintf, -ls, -print і -printf.

Дія -delete також працює як параметр (оскільки вона неявним чином встановлює -depth).

  ПОЗИЦІЙНІ ПАРАМЕТРИ
Позиційні параметри завжди повертають істинне значення. Вони стосуються лише перевірок, які визначено за ними у рядку команди.

-daystart
    Вимірювати час (для -amin, -atime, -cmin, -ctime, -mmin і -mtime) від початку поточного дня, а не від моменту 24 години тому. Цей параметр стосується лише перевірок, які вказано за ним у рядку команди.

-follow
    Застарілий; користуйтеся замість нього параметром -L. Розіменувати символічні посилання. Неявним чином встановлює -noleaf. Параметр -follow впливає лише на перевірки, які буде вказано у рядку команди після нього. Якщо не вказано параметра -H або -L, позиція параметра -follow змінює поведінку ключа -newer; усі файли зі списку-аргументу -newer буде розіменовано, якщо вони є символічними посиланнями. Те саме стосується параметрів -newerXY, -anewer і -cnewer. Так само, відповідність за ключем -type завжди встановлюватиметься за типом файла, на який вказує символічне посилання, а не за самим посиланням. Використання -follow спричиняє повернення за ключами -lname і -ilname значення хибності за будь-яких умов.

-regextype тип
    Змінює синтаксис формальних виразів, які використовують у перевірках -regex і -iregex, які вказано після нього у рядку команди. Щоб переглянути список відомих типів, скористайтеся параметром -regextype help. У документації до Texinfo (див. ДИВ. ТАКОЖ) описано значення і відмінності від різними типами формальних виразів. Якщо ви не скористаєтеся цим параметром, find поводитиметься так, наче було вказано формальний вираз типу emacs.

-warn, -nowarn
    Увімкнути або вимкнути виведення попереджень. Ці попередження стосуються лише використання командного рядка, а не умов, які може зустріти find при пошуку у каталогах. Типова поведінка відповідає варіанту -warn, якщо стандартним джерелом вхідних даних є термінал, і -nowarn в усіх інших випадках. Якщо буде виведено попередження, яке пов'язано із використанням командного рядка, стан виходу find змінено не буде. Якщо встановлено значення змінної середовища POSIXLY_CORRECT і також використано -warn, не буде визначено, які попередження будуть активними, і чи будуть вони активними взагалі.

  ЗАГАЛЬНІ ПАРАМЕТРИ
Загальні параметри завжди повертають істинність. Загальні параметри працюють навіть у перевірках, які вказано у рядку команди перед ними. Щоб запобігти конфліктам, загальні параметри слід вказувати у рядку команди після списку початкових точок, одразу перед першою перевіркою, позиційним параметром або дією. Якщо ви вкажете загальний параметр десь в іншому місці, find виведе попередження про те, що такий порядок є конфліктним.

Загальні параметри вказують у командному рядку після списку початкових точок, тому вони не належать до того самого типу параметрів, що і, наприклад, -L.

-d  Синонім -depth, для сумісності із FreeBSD, NetBSD, MacOS X та OpenBSD.

-depth
    Обробляти вміст кожного каталогу до самого каталогу. Використання дії -delete неявним чином встановлює -depth.

-files0-from файл
    Прочитати початкові точки з файла файл, замість отримання їх з рядка команди. На відміну від відомих обмежень передавання початкових точок, як аргументів рядка команди, а саме, обмеженнями на кількість назв файлів, та неусувну неоднозначність між назвами файлів і назвами параметрів, використання цього параметра надає змогу безпечно передавати find довільну кількість початкових точок.

    Використання цього параметра і передавання початкових точок у рядку команди є взаємно виключними, тому користуватися ними одночасно не можна.

    Аргумент файл є обов'язковим. Можна скористатися -files0-from - для читання списку початкових точок з потоку даних стандартного джерела вхідних даних і, наприклад, з каналу даних. У цьому випадку не можна використовувати дії -ok і -okdir, оскільки вони, явним чином, конфліктують із читанням даних зі стандартного джерела вхідних даних для отримання підтвердження від користувача.

    Початкові точки у файлі має бути відокремлено символом NUL ASCII. Не можна використовувати два послідовних символи NUL, тобто початкові точки із назвою файла нульової довжини. Поява таких двох послідовних символів призведе до виведення діагностичного повідомлення про помилку із ненульовим станом виходу з програми.

    Якщо заданий файл є порожнім, find не оброблятиме жодних початкових точок і тому завершить роботу негайно після обробки аргументів. У цьому відмінність від стандартного виклику, коли find припускатиме початкову точку у поточному каталозі, якщо не буде задано аргументу шляху.

    В інших аспектах, обробка початкових точок є звичайною. Наприклад, find рекурсивно обходитиме підкаталоги, якщо це не заборонено явним чином. Щоб програма обробляла лише початкові точки, слід додатково передати їй параметр -maxdepth 0.

    Подальші нотатки: якщо файл вказано у файлі вхідних даних декілька разів, те, чи буде його відвідано декілька разів, не визначено. Якщо до файла під час роботи find буде внесено зміни, результат також залишиться невизначеним. Нарешті, позиція в іменованому файлі на момент виходу з find за допомогою -quit або в інший спосіб, також є невизначеною. Під «невизначеністю» ми тут розуміємо те, що команда може спрацювати, може не спрацювати або може спрацювати не так, як ви сподівалися, а поведінка може бути різною на різних платформах або у різних випусках findutils.

-help, --help
    Вивести резюме щодо використання командного рядка у find і вийти.

-ignore_readdir_race
    Зазвичай, find видаватиме повідомлення про помилку, якщо не вдасться отримати статистичні дані щодо файла. Якщо ви передасте програмі цей параметр, і файл буде вилучено між моментом, коли find прочитає назву файла з каталогу, і моментом, коли програма спробує отримати статистичні дані щодо файла, повідомлення про помилку видано не буде. Це також стосується файлів або каталогів, чиї назви задано у рядку команди. Цей параметр набуває чинності у момент читання рядка команди, тобто ви не зможете виконати пошук у одній частині файлової системи із увімкненим параметром, а в іншій частині — з вимкненим (якщо ви хочете так зробити, вам доведеться видати дві команди find: одну із цим параметром, а другу — без нього).

    Крім того, find із параметром -ignore_readdir_race ігноруватиме помилки дії -delete, якщо файл зник з моменту читання батьківського каталогу: програма не видаватиме ніякої діагностики щодо помилок, а кодом повернення для дії -delete буде істинність.

-maxdepth рівні
    Спускатися не більше, ніж на рівні (невід'ємне ціле число) рівнів у каталогах під початковими точками. Якщо вказано -maxdepth 0, перевірки і дії буде застосовано лише до самих початкових точок.

-mindepth рівні
    Не застосовувати жодних перевірок або дій на рівнях, які є меншими за рівні (невід'ємне ціле число). Якщо використано -mindepth 1, буде оброблено усі файли, окрім початкових точок.

-mount
    Не спускатися у каталоги на інших файлових системах. Альтернативна назва -xdev, для сумісності із деякими іншими версіями find.

-noignore_readdir_race
    Вимикає ефект -ignore_readdir_race.

-noleaf
    Не оптимізувати припущенням, що у каталогах міститься на 2 підкаталоги менше, ніж у лічильнику їхнього жорсткого посилання. Цей параметр потрібен при пошуку у файлових системах, де не виконується угода щодо посилань на каталоги у Unix, зокрема файлових системах CD-ROM чи MS-DOS або точок монтування томів AFS. Кожен каталог у звичайній файловій системі Unix має принаймні 2 жорстких посилання: свою назву і свій запис «.». Крім того, кожен з його підкаталогів (якщо такі є) має запис «..», який пов'язано із цим каталогом. Коли find інспектує каталог, після обробки кількості підкаталогів, яка на 2 менша за кількість посилань на каталог, програма вже знає, що решта записів у каталозі не є каталогами (файлами-«листками» у дереві каталогів). Якщо інспектуванню підлягають лише назви файлів, немає потреби у отриманні подальших статистичних даних щодо них, і це значно прискорює пошук.

-version, --version
    Вивести номер версії find і завершити роботу.

-xdev
    Не спускатися у каталоги на інших файлових системах.

  ПЕРЕВІРКИ
У деяких перевірках, зокрема -newerXY і -samefile, можливим є порівняння між інспектованим файлом та деяким еталонним файлом, який вказано у рядку команди. При виконанні таких перевірок інтерпретація еталонного файла виконується за параметрами -H, -L і -P і будь-яким значенням попереднього параметра -follow, але обробка еталонного файла виконується лише один раз, під час обробки рядка команди. Якщо інспектування еталонного файла неможливе (наприклад, не вдалося виконати системний виклик stat(2) для нього), буде видано повідомлення про помилку, а find завершить роботу із ненульовим станом виходу.

У перевірках може бути вказано числовий аргумент n (наприклад, -amin, -mtime, -gid, -inum, -links, -size, -uid і -used) як у

+n  для значень, більших за n,

-n  для значень, менших за n,

n   для значень, які точно дорівнюють n.

Підтримувані перевірки:

-amin n
    Доступ до файла було здійснено менше, більше або точно n хвилин тому.

-anewer еталон
    Час останнього доступу до поточного файла є майбутнім щодо часу останнього внесення змін до даних файла еталон. Якщо еталон є символічним посиланням і вказано параметр -H або параметр -L, буде використано час останнього внесення змін до файла, на який вказує посилання.

-atime n
    Останній доступ до файла відбувався менше, більше або точно n*24 годин тому. При визначенні find кількості періодів у 24 години для останнього доступу до файла усі дробові частини буде проігноровано, тому, щоб бути відповідним критерію -atime +1, файл має бути таким, доступ до якого було здійснено принаймні два дні тому.

-cmin n
    Стан файла було востаннє змінено менше, більше або точно n хвилин тому.

-cnewer еталон
    Час останньої зміни стану поточного файла є майбутнім щодо часу останнього внесення змін до даних файла еталон. Якщо еталон є символічним посиланням і вказано параметр -H або параметр -L, буде використано час останнього внесення змін до файла, на який вказує посилання.

-ctime n
    Стан файла було востаннє змінено менше, більше або точно n*24 годин тому. Див. коментарі до -atime, щоб розібратися у тому, як округлення впливає на інтерпретацію часу зміни стану файла.

-empty
    Файл є порожнім і є або звичайним файлом, або каталогом.

-executable
    Встановлює відповідність файлам, які є виконуваними, та каталогам, які є придатними до пошуку (у сенсі визначення назв файлів), для поточного користувача. При цьому буде враховано списки керування доступом (ACL) та інші речі, пов'язані із правами доступу, які буде проігноровано під час перевірки -perm. У цій перевірці використано системний виклик access(2), тому її може бути дезінформовано серверами NFS, які виконують прив'язування UID (або root-ущільнення), оскільки у багатьох системах access(2) реалізовано на боці ядра клієнта, а отже, вони не можуть використати дані прив'язки до UID, які зберігаються на сервері. Оскільки результати цієї перевірки засновано лише на системному виклику access(2), немає ніяких гарантій того, що файл, який пройде перевірку, насправді може бути виконано.

-false
    Завжди хибність.

-fstype тип
    Файл зберігається у файловій системі типу тип. Перелік коректних файлових систем для перевірки є різним для різних версій Unix; ось неповний список типів файлових систем, які може бути прийнято у тих чи інших версіях Unix: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. Ви можете скористатися -printf з інструкцією %F, щоб переглянути список типів ваших файлових систем.

-gid n
    Числове значення ідентифікатора групи файла є меншим, більшим або рівним n.

-group назва
    Файл належить групі назва (можна вказати цифровий ідентифікатор групи).

-ilname взірець
    Те саме, що і -lname, але відповідність встановлюватиметься без врахування регістру символів. Якщо вказано параметр -L або -follow, ця перевірка повертає значення хибності, якщо символічне посилання є чинним.

-iname взірець
    Подібний до -name, але відповідність буде встановлено без врахування регістру символів. Наприклад, взірцям «fo*» та «F??» відповідають назви файлів «Foo», «FOO», «foo», «fOo» тощо. Крім того, взірцю «*foo*» відповідає файл із назвою «.foobar».

-inum n
    Файл має номер inode, який є меншим, більшим або рівним n. Зазвичай, простіше скористатися перевіркою -samefile.

-ipath взірець
    Подібний до -path, але відповідність встановлюється без врахування регістру.

-iregex взірець
    Подібний до -regex, але відповідність встановлюється без врахування регістру.

-iwholename взірець
    Див. -ipath. Ця альтернатива є менш розповсюдженою за -ipath.

-links n
    Кількість жорстких посилань на файл є меншою, більшою або рівною n.

-lname взірець
    Файл є символічним посиланням, вміст якого відповідає взірцю командної оболонки взірець. У метасимволах не передбачено спеціальної обробки «/» або «.». Якщо вказано параметр -L або параметр -follow, ця перевірка поверне значення хибності, якщо символічне посилання є чинним.

-mmin n
    Зміни до файла було внесено менше, більше або точно n хвилин тому.

-mtime n
    Дані файла було востаннє змінено менше, більше або точно n*24 годин тому. Див. коментарі до -atime, щоб розібратися у тому, як округлення впливає на інтерпретацію часу внесення змін до файла.

-name взірець
    Основа назви файла (шлях, з якого вилучено початкові записи каталогів) відповідає взірцю командної оболонки взірець. Оскільки початкові записи каталогів вилучено, назви файлів, які програма розглядатиме для встановлення відповідності із -name, ніколи не включатимуть символу похилої риски, отже «-name a/b» не відповідатиму жодному файлу (ймовірно, доведеться користуватися -path для таких відповідностей). Виключенням є використання лише символу похилої риски як взірця (`-name /'), оскільки це коректний рядок для встановлення відповідності кореневому каталогу «/» (оскільки базовою назвою «/» є «/»). Програма попередить вас, якщо ви спробуєте передати взірець, що містить похилу, але не лише її, якщо не встановлено змінну середовища POSIXLY_CORRECT або не використано параметр -nowarn.

    Щоб програма проігнорувала каталог і усі файли у ньому, скористайтеся -prune, замість перевірки усіх файлів в ієрархії; див. приклад в описі цієї дії. Фігурні дужки не розпізнають як особливі, хоча у деяких командних оболонках, зокрема Bash, фігурні дужки мають особливе призначення у взірцях оболонки. Встановлення відповідності назв файлів буде виконано з використанням бібліотечною функції fnmatch(3). Не забудьте взяти взірець у лапки, щоб запобігти його розгортанню командною оболонкою.

-newer еталон
    Час останнього внесення змін до даних поточного файла є майбутнім щодо часу останнього внесення змін до даних файла еталон. Якщо еталон є символічним посиланням і вказано параметр -H або параметр -L, буде використано час останнього внесення змін до файла, на який вказує посилання.

-newerXY еталон
    Вважається пройденою, якщо часова позначка X інспектованого файла є новішою за часову позначку Y файла еталон. Літерами X і Y можуть бути будь-які з таких літер:

    a | Час доступу до файла еталон
    B | Час створення файла еталон
    c | Час зміни стану inode файл еталон
    m | Час внесення змін до файла еталон
    t | еталон буде оброблено безпосередньо як час

    Деякі комбінації є некоректними. Наприклад, некоректно використовувати для X значення t. Деякі комбінації реалізовано не в усіх системах. Наприклад, не в усіх системах передбачено підтримку B. Якщо вказано некоректну або непідтримувану комбінацію XY, програма повідомить про критичну помилку. Специфікації часу буде оброблено за правилами аргументу параметра -d програми GNU date. Якщо ви спробуєте скористатися часом створення еталонного файла, а час створення не можна буде визначити, програма повідомить про критичну помилку. Якщо ви вкажете перевірку, яка посилається на час створення інспектованих файлів, перевірку не буде пройдено для усіх файлів, час створення яких є невідомим.

-nogroup
    Немає груп, які відповідають числовому ідентифікатору групи файла.

-nouser
    Немає користувачів, які відповідають числовому ідентифікатору користувача файла.

-path взірець
    Назва файла відповідає взірцю командної оболонки взірець. Без особливого значення для метасимволів «/» та «.». Отже, наприклад,
    find . -path "./sr*sc"
    виведе запис для каталогу із назвою ./src/misc (якщо такий існує). Щоб програма проігнорувала усе дерево каталогів, скористайтеся параметром -prune замість перевірки усіх файлів у дереві. Зауважте, що перевірку відповідності взірцю буде застосовано до усієї назви файла, починаючи з однієї з початкових точок з рядка команди. Використання тут абсолютного шляху має сенс, лише якщо початкову точку також вказано як абсолютний шлях. Це означає, що така команда ніколи не дасть ніяких результатів:
    find щось -path /десь/щось/мій_файл -print
    Find порівнює аргумент -path з об'єднанням назви каталогу і базової назви інспектованого файла. Оскільки об'єднання ніколи не завершується символом похилої риски, аргументи -path, які завершуватимуться похилою рискою, не відповідають жодному файлу (окрім, можливо, початкової точки, яку вказано у рядку команди). Підтримку ключа -path також передбачено у find для HP-UX, вона є частиною стандарту POSIX 2008.

-perm режим
    Біти прав доступу до файла точно збігаються зі значенням режим (вісімковим або символьним). Оскільки потрібна точна відповідність. якщо ви хочете скористатися цією формою для символьних режимів, вам, може, доведеться вказати доволі складний рядок режиму. Наприклад, «-perm g=w» відповідає лише файлам, які мають режим доступу 0020 (тобто файлів, для яких встановлено лише право доступу на запис для групи). Ймовірніше, вам варто скористатися формами «/» або «-», наприклад «-perm -g=w», де відповідність буде встановлено будь-якому файлу із правому доступу на запис для групи. Див. розділ ПРИКЛАДИ, де наведено показові приклади.

-perm -режим
    Для файла встановлено усі біти прав доступу режим. У цій формі можна використовувати символьні режими, і це саме той випадок, коли ними варто користуватися. Вам слід вказати «u», «g» або «o», якщо ви хочете скористатися символьним режимом. Див. розділ ПРИКЛАДИ, де наведено показові приклади.

-perm /режим
    Для файла не встановлено жодного з бітів прав доступу режим. У цій формі можна використовувати символьні режими. Вам слід вказати «u», «g» або «o», якщо ви хочете скористатися символьним режимом. Див. розділ ПРИКЛАДИ, де наведено показові приклади. Якщо не встановлено жодного з бітів з запису режим, цю перевірку пройде будь-який файл (ідея полягає у тому, щоб зберегти сумісність із поведінкою у відповідь на -perm -000).

-perm +режим
    Підтримку цього параметра припинено (його вважали застарілим з 2005 року). Скористайтеся замість ного -perm /режим.

-readable
    Встановлює відповідність файлам, які придатні до читання для поточного користувача. Тут буде взято до уваги списки керування доступом (ACL) та інші фактори надання прав доступу, які буде проігноровано під час перевірки -perm. У цій перевірці використано системний виклик access(2), тому її може бути дезінформовано серверами NFS, які виконують прив'язування UID (або root-ущільнення), оскільки у багатьох системах access(2) реалізовано на боці ядра клієнта, а отже, вони не можуть використати дані прив'язки до UID, які зберігаються на сервері.

-regex взірець
    Встановлює відповідність назви файла формальному виразу взірець. Це відповідність за повним шляхом, а не пошук. Наприклад, щоб відповідним було визначено файл із назвою ./fubar3, можна скористатися формальним виразом «.*bar.» або «.*b.*3», але не «f.*r3». Типово, формальними виразами, які розуміє find, є формальні вирази Emacs, але це можна змінити за допомогою параметра -regextype.

-samefile назва
    Файл посилається на той самий inode, що і назва. Якщо вказано -L, це може стосуватися і символічних посилань.

-size n[cwbkMG]
    Файл використовує менше, більше або точно n одиниць об'єму інформації на диску, з округленням вгору. Можна використовувати такі суфікси:

    `b' для 512-байтових блоків (це типовий варіант, що не використано жодного суфікса)

    `c' для байтів

    `w' для двобайтових слів

    `k' для кібібайтів (КіБ, одиниць у 1024 байтів)

    `M' для мебібайтів (МіБ, одиниць у 1024 * 1024 = 1048576 байтів)

    `G' для гібібайтів (ГіБ, одиниць у 1024 * 1024 * 1024 = 1073741824 байтів)

    Розмір є просто членом st_size структури stat, яку заповнює системний виклик lstat (або stat), із округленням вгору, як це показано вище. Іншими словами, розмір є сумісним із результатом, який дає ls -l. Слід пам'ятати, що специфікатори формату «%k» і «%b» -printf обробляють розріджені файли інакше. Суфікс «b» завжди позначає 512-байтові блоки, і ніколи — 1024-байтові блоки, що відрізняється від поведінки -ls.

    Префікси + і - позначають «більше» і «менше», як звично; тобто точний розмір у n одиниць не є відповідним. Пам'ятайте, що розмір буде округлено до наступної одиниці. Тому -size -1M не є тим самим, що і -size -1048576c. Першому варіанту відповідатимуть лише порожні файли, а другому — файли, розмір яких потрапляє у діапазон від 0 до 1048575 байтів.

-true
    Завжди істина.

-type c
    Файл належить до типу c:

    b   блоковий (буферизований) спеціальний

    c   символьний (небуферизований) спеціальний

    d   каталог

    p   іменований канал даних (FIFO)

    f   звичайний файл

    l   символічна посилання; ніколи не повертає значення істинності, якщо вказано параметр -L або параметр -follow, якщо символічне посилання є чинним. Якщо вам потрбіні символічні посилання із вказаним -L, скористайтеся -xtype.

    s   сокет

    D   двері (Solaris)

    Щоб виконати пошук одразу декількох типів, ви можете вказати комбінований список літер типів, які відокремлено комою «,» (розширення GNU).

-uid n
    Числове значення ідентифікатора користувача файла є меншим, більшим або рівним n.

-used n
    Доступ до файла було здійснено менше, більше або точно n днів з моменту останньої зміни у файлі.

-user ім'я
    Власником файла є користувач ім'я (можна скористатися числовим ідентифікатором користувача).

-wholename взірець
    Див -path. Ця альтернатива є менш розповсюдженою за -path.

-writable
    Встановлює відповідність файлам, які придатні до запису для поточного користувача. Тут буде взято до уваги списки керування доступом (ACL) та інші фактори надання прав доступу, які буде проігноровано під час перевірки -perm. У цій перевірці використано системний виклик access(2), тому її може бути дезінформовано серверами NFS, які виконують прив'язування UID (або root-ущільнення), оскільки у багатьох системах access(2) реалізовано на боці ядра клієнта, а отже, вони не можуть використати дані прив'язки до UID, які зберігаються на сервері.

-xtype c
    Те саме, що і -type, якщо файл не є символічним посиланням. Для символічних посилань: якщо вказано параметр -H або -P, повертає істинність, якщо файл є посиланням на файл типу c; якщо вказано параметр -L, повертає істинність, якщо c дорівнює «l». Іншими словами, для символічних посилань -xtype перевіряє тип файла, який не перевіряє -type. Якщо символічне посилання розірвано (оскільки вказує на щось, що не існує, або вказує на саме себе), -xtype поводитиметься так само, як -type.

-context взірець
    (Лише SELinux) Контекст захисту файла відповідає взірцю.

  ДІЇ

-delete
    Вилучити файли або каталоги. Повертає істину, якщо вилучення відбулося успішно Якщо під час вилучення сталася помилка, буде виведено повідомлення про помилку, а стан виходу find буде ненульовим (якщо вихід з програми врешті станеться).

    Попередження: пам'ятайте, що find обробляє рядок команди як вираз, тому, якщо спершу вказати -delete, find спробує вилучити усе під початковими точками, які ви вказали.

    Використання дії -delete у рядку команди автоматично вмикає параметр -depth. Оскільки -depth вимикає -prune, дію -delete не можна ефективно поєднувати із -prune.

    Часто користувачі перевіряють рядок команди find за допомогою -print, перш ніж додавати -delete для виконання вилучення файлів. Щоб уникнути несподіванок, зазвичай, краще запам'ятати, що варто використовувати -depth під час цих попередніх перевірок явним чином.

    Дією -delete не можна скористатися для вилучення каталогу, якщо він не є порожнім.

    Якщо вказано параметр -ignore_readdir_race, find ігноруватиме помилки дії -delete, якщо файл зник з моменту читання батьківського каталогу: програма не видаватиме ніякої діагностики щодо помилок, не змінить код виходу на ненульовий, а кодом повернення для дії -delete буде істинність.

-exec команда ;
    Виконати команду; істина, якщо буде повернуто стан виходу 0. Усі наступні аргументи find буде оброблено як аргументи команди, аж доки не буде виявлено аргументу, що містить «;». Рядок «{}» буде замінено на назву поточного файла в обробці усюди, де його буде виявлено в аргументах команди, а не лише в аргументах, де його вказано окремо, я у деяких версіях find. Обидві ці конструкції можуть потребувати екранування (за допомогою «\») або взяття у лапки для запобігання розгортанню командною оболонкою. Приклади використання параметра -exec наведено у розділі ПРИКЛАДИ. Вказану команду буде запущено один раз для кожного з відповідних файлів. Запуск команди відбуватиметься у початковому каталозі. Із використанням дії -exec пов'язано проблеми із захистом, яких не можна уникнути. Якщо хочете позбутися цих проблем, користуйтеся параметром -execdir.

-exec команда {} +
    Цей варіант дії -exec запускає вказану команду над вибраними файлами, але рядок команди буде побудовано дописуванням кожного вибраного файла; загальна кількість викликів команди буде набагато меншою за кількість відповідних файлів. Рядок команди буде побудовано, здебільшого, у той самий спосіб, у який будує свої рядки команд xargs. У команді можна використовувати лише один екземпляр «{}», і його має бути вказано наприкінці, одразу перед «+»; його має бути екрановано (за допомогою «\») або взято у лапки для запобігання його обробці командною оболонкою. Команду буде виконано у початковому каталозі. Якщо якийсь із викликів у формі «+» поверне ненульове значення, як стан виходу, find поверне ненульовий стан виходу. Якщо find трапиться помилка, це може іноді спричинити негайний вихід з програми, тому деякі з команд у черзі виконання взагалі не буде виконано. З цієї причини, у конструкції -exec команда ... {} + -quit команду команда може бути не запущено взагалі. Цей варіант -exec завжди повертає істину.

-execdir команда ;

-execdir команда {} +
    Подібний до -exec, але вказану команду буде запущено з підкаталогу, який містить відповідний файл. Зазвичай, цим підкаталогом є каталог, у якому ви запускаєте find. Так само, як з -exec, {} слід брати у лапки, якщо find запускають з командної оболонки. Це набагато безпечніший спосіб виклику команд, оскільки його використання надає змогу уникнути конкурентності під час визначення шляхів до відповідних файлів. Як і з дією -exec, форма з «+» -execdir побудує рядок команди для обробки декількох відповідних файлів, але будь-який вказаний виклик команди призведе до виведення списку лише файлів у тому самому каталозі. Якщо ви використовуєте цей параметр, вам слід переконатися, що у вашій змінній середовища PATH немає посилання на «.». Якщо цього не зробити, зловмисник зможе запускати будь-які потрібні йому команди, створивши файл з відповідною назвою у каталозі, у якому ви запускатимете -execdir. Те саме стосується записів у PATH, які є порожніми або які не є абсолютними назвами каталогів. Якщо будь-який з викликів форми з «+» повертає ненульове значення як стан виходу, стан виходу з find також буде ненульовим. Якщо find трапиться помилка, це іноді може спричинити негайне завершення роботи програми, тому команди у черзі може бути взагалі не виконано. Результат дії залежить від того, який варіант використано, з + чи з ;; -execdir команда {} + завжди повертає істину, а -execdir команда {} ; повертає істину, лише якщо команда повертає 0.

-fls файл
    Істина; подібний до -ls, але записує до файла, подібно до -fprint. Файл виведення буде створено завжди, навіть якщо за ключем нічого не буде знайдено. Див. розділ НЕЗВИЧАЙНІ НАЗВИ ФАЙЛІВ, щоб дізнатися більше про те, як програма оброблятиме незвичні символи у назвах файлів.

-fprint файл
    Істина; вивести повну назву файла до файла файл. Якщо файла файл не існує на момент запуску find, його буде створено; якщо файл існує, його буде обрізано. Назви файлів /dev/stdout і /dev/stderr буде оброблено особливим чином; вони посилаються на стандартне виведення та стандартне виведення помилок, відповідно. Файл виведення буде створено завжди, навіть якщо не буде встановлено відповідності жодному файлу. Див. розділ НЕЗВИЧАЙНІ НАЗВИ ФАЙЛІВ, щоб дізнатися більше про те, як програма обробляє незвичайні символи у назвах файлів.

-fprint0 файл
    Істина; подібний до -print0, але записує до файла, подібно до -fprint. Файл виведення буде створено завжди, навіть якщо за ключем нічого не буде знайдено. Див. розділ НЕЗВИЧАЙНІ НАЗВИ ФАЙЛІВ, щоб дізнатися більше про те, як програма оброблятиме незвичні символи у назвах файлів.

-fprintf файл формат
    Істина; подібний до -printf, але записує до файла, подібно до -fprint. Файл виведення буде створено завжди, навіть якщо за ключем нічого не буде знайдено. Див. розділ НЕЗВИЧАЙНІ НАЗВИ ФАЙЛІВ, щоб дізнатися більше про те, як програма оброблятиме незвичні символи у назвах файлів.

-ls Істина; додає поточний файл у форматі ls -dils до списку, який буде виведено до стандартного виведення. Розмір блоків вважатиметься рівним 1 кБ, якщо не встановлено змінну середовища POSIXLY_CORRECT. Встановлення цієї змінної призведе до використання 512-байтових блоків. Див. розділ НЕЗВИЧАЙНІ НАЗВИ ФАЙЛІВ, щоб дізнатися про те, як відбуватиметься обробка незвичайних символів у назвах файлів.

-ok команда ;
    Подібний до -exec, але із надсиланням початкового запиту до користувача. Якщо користувач погоджується, буде виконано команду. Якщо погодження не буде, буде повернуто логічну хибність. Якщо буде запущено команду, її стандартне джерело вхідних даних буде переспрямовано з /dev/null. Цю дію не можна вказувати разом із параметром -files0-from.

    Відповідь на запит буде порівняно із парою формальних виразів для визначення, є відповідь підтвердженням чи запереченням. Цей формальний вираз буде отримано від системи, якщо встановлено змінну середовища POSIXLY_CORRECT, або, якщо змінну не встановлено, з перекладів повідомлень find. Якщо у системі немає відповідного визначення, буде використано визначення самої програм find. У всіх випадках на обробку формального виразу впливатимуть змінні середовища LC_CTYPE (класи символів) і LC_COLLATE (діапазони символів та класи еквівалентності).

-okdir команда ;
    Подібний до -execdir, але із надсиланням початкового запиту до користувача у той самий спосіб, що і для -ok. Якщо користувач не погоджується, буде просто повернуто логічну хибність. Якщо буде запущено команду, її стандартне джерело вхідних даних буде переспрямовано з /dev/null. Цю дію не можна вказувати разом із параметром -files0-from.

-print
    Істина; виводить повну назву файла до стандартного виведення із доповненням символом нового рядка. Якщо ви переспрямовуєте виведення find до іншої програми, і існує найменша можливість того, що файли, які шукає програма, може міститися символ нового рядка, вам варто скористатися параметром -print0 замість -print. Див. розділ НЕЗВИЧАЙНІ НАЗВИ ФАЙЛІВ, щоб дізнатися про те, як відбуватиметься обробка незвичайних символів у назвах файлів.

-print0
    Істина; виводить повну назву файла до стандартного виведення із доповненням нуль-символом (замість символу нового рядка, який використано для -print). Це надає змогу належним чином обробляти назви файлів, які містять символи нового рядка та інші тип пробілів, у програмах, які обробляють виведені find дані. Цей параметр відповідає параметру -0 програми xargs.

-printf формат
    Істина; вивести формат до стандартного виведення з обробкою керівних послідовностей «\» та інструкцій «%». Ширини полів та точність можна вказати як у функції C printf(3). Будь ласка, зауважте, багато цих полів буде виведено як %s, а не %d, і це означає, що прапорці працюватимуть не так, як ви могли сподіватися. Це також значить, що прапорець «-» не працюватиме (він примусово встановлює для полів вирівнювання ліворуч). На відміну від -print, -printf не додає символ нового рядка наприкінці рядка. Керівні послідовності та інструкції є такими:

    \a  Гудок попередження.

    \b  Backspace.

    \c  Припинити виведення з цього формату негайно і очистити виведення.

    \f  Подавання бланку.

    \n  Новий рядок.

    \r  Повернення каретки.

    \t  Горизонтальна табуляція.

    \v  Вертикальна табуляція.

    \0  NUL ASCII.

    \\  Сам символ зворотної похилої риски («\»).

    \NNN
        Символ, чиїм кодом ASCII є NNN (вісімкове число).

    Символ «\», після якого вказано будь-який інший символ вважається звичайним символом, тому буде виведено обидва ці символи.

    %%  Сам символ відсотків.

    %a  Час останнього доступу до файла у форматі, у якому повертає дані функція C ctime(3).

    %Ak Час останнього доступу до файла у форматі, який вказано літерою k, якою є або «@», або інструкція для функції C strftime(3). Нижче наведено неповний список можливих значень k. Будь ласка, зверніться до документації з strftime(3), щоб ознайомитися із повним списком. Деякі з символів специфікації перетворення можуть бути недоступними на певних системах через відмінності в реалізації бібліотечної функції strftime(3).

        @   секунди з 1 січня 1970 року, 00:00 GMT, із дробовою частиною.

        Поля часу:

        H   година (00..23)

        I   година (01..12)

        k   година ( 0..23)

        l   година ( 1..12)

        M   хвилина (00..59)

        p   AM (до обіду) або PM (після обіду) у локалі

        r   час, 12-и годинний (гг:хх:сс [AP]M)

        S   Секунда (00.00 .. 61.00). Із дробовою частиною.

        T   час, 24-и годинний (гг:хх:сс.xxxxxxxxxx)

        +   Дата і час, відокремлені «+», приклад: «2004-04-28+22:22:05.0». Це розширення GNU. Час задається у поточному часовому поясі (на який можна вплинути встановленням змінної середовищі TZ). Поле секунд включає дробову частину.

        X   представлення часу у локалі (Г:Х:С). У поле секунд буде включено дробову частину.

        Z   часовий пояс (наприклад, EDT) або нічого, якщо часовий пояс не можна визначити

        Поля дат:

        a   скорочена форма запису дня тижня у локалі (Пн..Нд)

        A   повна назва дня тижня у локалі, змінної довжини (Понеділок..Неділя)

        b   скорочена назва місяця у локалі (січ..гру)

        B   повна назва місяця у локалі, змінної довжини (січень..грудень)

        c   дата і час у локалі (Sat Nov 04 12:02:33 EST 1989). Формат є таким самим, як і у ctime(3), і щоб зберегти сумісність із цим форматом, у полі секунд не буде дробової частини.

        d   день місяця (01..31)

        D   дата (мм/дд/рр)

        F   дата (рррр-мм-дд)

        h   те саме, що і b

        j   день року (001..366)

        m   місяць (01..12)

        U   номер тижня року, де першим днем тижня є неділя (00..53)

        w   день тижня (0..6)

        W   номер тижня року, де першим днем тижня є понеділок (00..53)

        x   представлення дати у локалі (мм/дд/рр)

        y   останні дві цифри року (00..99)

        Y   рік (1970...)

    %b  Місце, яке використано на диску для зберігання цього файла, у 512-байтових блоках. Оскільки місце на диску визначається у величинах, кратних до розміру блоку у файловій системі, це значення, зазвичай, є більшим за %s/512, але воно може бути і меншим, якщо файл є розрідженим.

    %Bk Час створення файла, у форматі, вказаному аргументом k, який є тим самим, що і для %A. Ця інструкція створює порожній рядок, якщо у базовій операційній системі або файловій системі не передбачено підтримки часу створення.

    %c  Час останньої зміни стану файла у форматі, у якому повертає дані функція C ctime(3).

    %Ck Час останньої зміни стану файла у форматі, визначеному k, який є тим самим, що і для %A.

    %d  Глибина файла в ієрархії каталогів; 0 означає, що файл є початковою точкою.

    %D  Номер пристрою, на якому зберігається файл (поле st_dev структури статистичних даних), у десятковій формі.

    %f  Вивести базову назву; назву файла без усіх каталогів (лише останній запис у шляху). Для / результатом буде «/». Приклади можна знайти у розділі ПРИКЛАДИ.

    %F  Тип файлової системи, у якій зберігається файл; цим значенням можна скористатися для -fstype.

    %g  Назва групи файла, або числовий ідентифікатор групи, якщо у групи немає назви.

    %G  Цифровий ідентифікатор групи файла.

    %h  Назва каталогу; початкові каталоги у назві файла (усе у шляху, окрім останнього елемента). Якщо у назві файла немає символів похилої риски (оскільки він зберігається у поточному каталозі) специфікатор %h буде розгорнуто до «.». Для файлів, які самі є каталогами і містять символ похилої риски (зокрема /), %h буде розгорнуто до порожнього рядка. Приклад можна знайти у розділі ПРИКЛАДИ.

    %H  Початкова точка, під якою було знайдено файл

    %i  Номер inode файла (у десятковій формі).

    %k  Місце, яке використано на диску для зберігання цього файла, у блоках розміру 1 кБ. Оскільки місце на диску визначається у величинах, кратних до розміру блоку у файловій системі, це значення, зазвичай, є більшим за %s/1024, але воно може бути і меншим, якщо файл є розрідженим.

    %l  Об'єкт символічного посилання (порожній рядок, якщо файл не є символічним посиланням).

    %m  Біти прав доступу до файла (у вісімковій формі). У цьому параметрі використовують «традиційні» числа, які використовують у більшості реалізацій, але якщо ваша реалізація використовує нетипове упорядкування вісімкових бітів прав доступу, ви побачите відмінність між справжнім значенням режиму доступу до файла і даними, які виведено %m. Зазвичай, слід вказувати початковий нуль у цьому числі, а для цього вам слід скористатися прапорцем # (як у, наприклад, «%#m»).

    %M  Права доступу до файла (у символьній формі, як для ls). Підтримку цієї інструкції реалізовано у findutils 4.2.5 та новіших версіях.

    %n  Кількість жорстких посилань на файл.

    %p  Назва файла.

    %P  Назва файла із вилученням назви початкової точки, де його було знайдено.

    %s  Розмір файла у байтах.

    %S  Розрідженість файла. Обчислюється за формулою (РОЗМІР_БЛОКУ*st_blocks / st_size). Точне значення для звичайного файла певної довжини залежить від системи. Втім, зазвичай, для розріджених файлів це значення є меншим за 1.0, а файли, у яких використано опосередковані блоки, можуть мати значення, яке є більшим за 1.0. Загалом, кількість блоків, які використано файлом, залежить від файлової системи. Значення РОЗМІР_БЛОКУ залежить від операційної системи, але, зазвичай, дорівнює 512 байтів. Якщо розмір файла є нульовим, виведене значення є невизначеним. У системах, де не реалізовано підтримку st_blocks, припускають, що розрідженість файлів дорівнює 1.0.

    %t  Час останнього внесення змін до файла у форматі, у якому повертає дані функція C ctime(3).

    %Tk Час останнього внесення змін до файла у форматі, визначеному k, який є тим самим, що і для %A.

    %u  Ім'я користувача-власника файла або числовий ідентифікатор користувача, якщо у користувача немає імені.

    %U  Числовий ідентифікатор користувача файла.

    %y  Тип файла (подібний до виведеного ls -l), U=невідомий тип (такого, загалом, не повинно бути)

    %Y  Тип файла (подібний до %y) із переходом за символічними посиланнями: «L»=цикл, «N»=не існує, «?» для будь-якого іншого повідомлення про помилку при визначенні типу призначення символічного посилання.

    %Z  (Лише SELinux) Контекст захисту файла.

    %{ %[ %(
        Зарезервовано для використання у майбутньому.

    Символ «%», після якого вказано будь-який інший символ, буде відкинуто, але інший символ буде виведено (втім, не варто на це покладатися, оскільки у процесі розвитку програми може бути впроваджено інші символи форматування). Символ «%» наприкінці аргументу форматування спричиняє невизначену поведінку, оскільки після нього немає ніяких символів.

    У інструкціях %m і %d передбачено підтримку прапорців #, 0 і +, але в інших інструкціях цього не передбачено, навіть якщо ці інструкції виводять числа. Серед числових інструкцій, для яких не передбачено підтримку цих прапорців G, U, b, D, k та n. Передбачено підтримку прапорця форматування «-». Цей прапорець змінює вирівнювання поля з вирівнювання праворуч (типовий варіант) на вирівнювання ліворуч.

    Див. розділ НЕЗВИЧАЙНІ НАЗВИ ФАЙЛІВ, щоб дізнатися більше про те, як програма оброблятиме незвичні символи у назвах файлів.

-prune
    Істина; якщо файл є каталогом, не спускатися у нього. Якщо задано параметр -depth, -prune не працюватиме. Оскільки -delete неявним чином встановлює -depth, ви не зможете скористатися одночасно -prune і -delete. Наприклад, щоб пропустити каталог src/emacs і усі файли і каталоги у ньому, і вивести назви інших знайдених файлів, віддайте таку команду:
    find . -path ./src/emacs -prune -o -print

-quit
    Вийти негайно (із нульовим кодом виходу, якщо не сталося помилок). Відрізняється від -prune, оскільки -prune буде застосовано лише до вмісту обрізаних каталогів, а -quit просто негайно припиняє роботу find. Не залишиться працювати жодних дочірніх процесів. Перед виходом з програми буде виконано усі рядки команд, які було побудовано -exec ... + або -execdir ... +. Після виконання -quit не відбуватиметься обробка жодних файлів, які вказано у рядку команди. Наприклад, у відповідь на find /tmp/щось /tmp/десь -print -quit буде виведено лише «/tmp/щось».
    Одним із типових випадків використання -quit є припинення пошуків у файловій системі, щойно буде знайдено те, що потрібно. Наприклад, якщо потрібно знайти лише один файл, можна зробити так:
    find / -name голка -print -quit

  ОПЕРАТОРИ
Список у порядку спадання пріоритетності:

( вираз )
    Перевизначити пріоритетність. Оскільки круглі дужки мають особливе значення у командній оболонці, вам, зазвичай, доведеться їх екранувати. У багатьох прикладах на цій сторінці підручника для цього використано символи зворотної похилої риски: «\(...\)» замість «(...)».

! вираз
    Істина, якщо вираз має значення хибності. Цей символ також, зазвичай, потребує екранування від взаємодії із командною оболонкою.

-not вираз
    Те саме, що і ! вираз, але несумісне з POSIX.

вираз1 вираз2
    Два вирази поспіль вважаються об'єднаними неявно за допомогою -a; програма не обчислюватиме значення вираз2, якщо вираз1 є хибним.

вираз -a вираз2
    Те саме, що і вираз1 вираз2.

вираз -and вираз2
    Те саме, що і вираз1 вираз2, але несумісне з POSIX.

вираз1 -o вираз2
    АБО; програма не обчислюватиме значення вираз2, якщо значення вираз1 є істинним.

вираз1 -or вираз2
    Те саме, що і вираз1 -o вираз2, але несумісне з POSIX.

вираз1 , вираз2
    Список; буде завжди обчислено значення вираз1 і вираз2. Значення вираз1 буде відкинуто; значенням списку буде значення вираз2. Оператор «кома» може бути корисним для пошуку записів декількох різних типів, але з обходом ієрархії файлової системи лише раз. Для виведення списку різноманітних відповідних записів до декількох різних файлів виведення можна скористатися дією -fprintf.

Будь ласка, зауважте, що оператор -a, якщо його вказано не явно (наприклад, у вигляді двох перевірок, між якими не вказано явно оператора) або явно, має вищий пріоритет за -o. Це означає, що find . -name файлА -o -name файлБ -print ніколи не виведе файлА.

НЕЗВИЧАЙНІ НАЗВИ ФАЙЛІВ
Результатом виконання багатьох дій у find є виведення даних, якими керують інші програми. Це стосується назв, розмірів, часу внесення змін до файлів тощо. Потенційною проблемою є назви файлів, оскільки вони можуть містити будь-які символи, окрім «\0» і «/». Незвичайні символи у назвах файлів можуть призводити до неочікуваних і часто небажаних наслідків у терміналі (наприклад, змінювати параметри роботи функціональних клавіш у деяких терміналах). Незвичайні символи у різних діях буде оброблено по-різному, як це описано нижче.

-print0, -fprint0
    Завжди виводить точну назву файла, без змін, навіть якщо виведення відбувається до термінала.

-ls, -fls
    Незвичайні символи буде завжди екрановано. Пробіл, символ зворотної похилої риски та символи подвійних лапок буде виведено з використанням екранування у стилі C (наприклад, «\f», «\"»). Інші незвичайні символи буде виведено з використанням вісімкової нейтралізації. Інші ж друковані символи (для -ls і -fls ці символи мають вісімкові значення кодування від 041 до 0176) буде виведено без змін.

-printf, -fprintf
    Якщо дані буде виведено не до термінала, їх буде виведено без обробки. Якщо дані виводитимуться до термінала, результат залежатиме від того, яку інструкцію використано. Інструкції %D, %F, %g, %G, %H, %Y і %y буде розгорнуто до значень, які не контролюються власникам файлів і будуть виведені без обробки. Інструкції %a, %b, %c, %d, %i, %k, %m, %M, %n, %s, %t, %u і %U мають значення, які контролюються власниками файлів, але які не можна використовувати для надсилання довільних даних до термінала, і тому їх буде виведено без обробки. Інструкції %f, %h, %l, %p і %P буде нейтралізовано. Нейтралізація виконуватиметься у той самий спосіб, що і для GNU ls. Це не той механізм нейтралізації, який використано для -ls і -fls. Якщо ви можете визначити формат, яким слід скористатися для виведення даних find, зазвичай, краще скористатися роздільником «\0» замість символу нового рядка, оскільки назви файлів можуть містити пробіли і символи нового рядка. Для визначення того, які символи слід нейтралізувати, буде використано значення змінної середовища LC_CTYPE.

-print, -fprint
    Нейтралізація виконуватиметься у той самий спосіб, що і для -printf і -fprintf. Якщо ви користуєтеся find у скрипті або у випадку, коли відповідні файли можуть мати довільні назви, вам слід спробувати скористатися -print0 замість -print.

Дії -ok і -okdir виводять назву поточного файла без обробки. Це може бути змінено у майбутніх випусках.

СУМІСНІСТЬ ІЗ СТАНДАРТАМИ
Для забезпечення найточнішої сумісності зі стандартом POSIX вам слід встановити змінну середовища POSIXLY_CORRECT. У стандарті POSIX (IEEE Std 1003.1-2008, редакція 2016 року) вказано такі параметри:

-H  Підтримку цього параметра передбачено.

-L  Підтримку цього параметра передбачено.

-name
    Підтримку цього параметра передбачено, але сумісність із POSIX залежить від сумісності із POSIX загальносистемної бібліотечної функції fnmatch(3). На момент випуску findutils-4.2.2, метасимволи командної оболонки (наприклад «*», «?» або «[]») вважалися відповідними початковій «.», оскільки цього вимагає інтерпретація IEEE PASC 126. Це зміна порівняно із попередніми версіями findutils.

-type
    Підтримку передбачено. POSIX визначає «b», «c», «d», «l», «p», «f» і «s». У GNU find також передбачено підтримку «D», тобто Door (дверей), там, де цю можливість надає операційна система. Крім того, GNU find уможливлює одночасне задання декількох типів у форматі списку відокремлених комами значень.

-ok Підтримку передбачено. Інтерпретація відповіді виконується відповідно до шаблонів «yes» та «no», які вибрано встановленим значенням змінної середовища LC_MESSAGES. Якщо встановлено значення змінної середовища POSIXLY_CORRECT, для взірців позитивної (yes) і негативної (no) відповідей буде використано загальносистемні визначення. Див. документацію системи щодо nl_langinfo(3), зокрема YESEXPR і NOEXPR. Якщо значення змінної POSIXLY_CORRECT не встановлено, взірці буде взято з власного каталогу повідомлень find.

-newer
    Підтримку передбачено. Якщо вказаний файл є символічним посиланням, його завжди буде розіменовано. Це зміна попередньої поведінки, якою було використання відповідного часу з символічного посилання; див. розділ ЖУРНАЛ нижче.

-perm
    Передбачено підтримку. Якщо змінну середовища POSIXLY_CORRECT не встановлено, підтримку деяких аргументів режиму доступу (наприклад +a+x), які не є чинними у POSIX, передбачено для зворотної сумісності.

Інші основні параметри
    Передбачено підтримку усіх основних параметрів -atime, -ctime, -depth, -exec, -group, -links, -mtime, -nogroup, -nouser, -ok, -path, -print, -prune, -size, -user і -xdev.

Стандарт POSIX визначає круглі дужки «(», «)», заперечення «!» і логічні оператори І/АБО -a та -o.

Усі інші параметри, ключі, вирази поки є розширеннями стандарту POSIX. Втім, багато з цих розширень не є унікальними для GNU find.

Стандарт POSIX потребує виявлення циклів з боку find:

    Інструмент find має виявляти нескінченні цикли; тобто перехід до раніше відвіданого каталогу, який є попередником останнього обробленого файла. При виявленні нескінченного циклу find має записувати діагностичне повідомлення до стандартного виведення і має або відновити позицію в ієрархії каталогів, або перервати роботу.

GNU find є сумісним із цими вимогами. Кількість посилань для каталогів, які містять записи, які є жорсткими посиланням на попередника, часто буде меншою за кількість посилань для каталогів без цих записів. Це може означати, що GNU find іноді оптимізуватиме відвідання підкаталогу, який насправді є посиланням на свого попередника. Оскільки find насправді не входитиме до такого підкаталогу, можна не видавати діагностичного повідомлення. Хоча ця поведінка може іноді призвести до плутанини, навряд чи хтось насправді покладатиметься на таку поведінку. Якщо оптимізацію за переходами було вимкнено за допомогою -noleaf, запис каталогу завжди інспектуватиметься, а діагностичне повідомлення буде видано там, де це потрібно. Символічні посилання не можна використовувати цикли у файловій системі, як такі, але якщо використано параметр -L або параметр -follow, діагностичне повідомлення буде видано, коли find виявить циклічність символічних посилань. Як і з циклами, що містять жорсткі посилання, оптимізація переходів часто означатиме, що find знає, що немає потреби у виклику stat() або chdir() для символічного посилання, тому така діагностика часто є непотрібною.

Підтримку параметра -d реалізовано для сумісності з різноманітними системами BSD, але вам слід використовувати замість цього параметра сумісний із POSIX параметр -depth.

Змінна середовища POSIXLY_CORRECT не впливає на поведінку перевірок -regex і -iregex, оскільки ці перевірки не вказано у стандарті POSIX.

ЗМІННІ СЕРЕДОВИЩА

LANG
    Надає типове значення для змінних інтернаціоналізації, які не встановлено або які є порожніми.

LC_ALL
    Якщо для змінної встановлено непорожнє рядкове значення, воно має пріоритет над усіма іншими змінними інтернаціоналізації.

LC_COLLATE
    Стандарт POSIX визначає, що ця змінна впливає на встановлення відповідності взірців, яке слід використовувати для параметра -name GNU find використовує бібліотечну функцію fnmatch(3), отже, підтримка LC_COLLATE залежить від загальносистемної бібліотеки. Ця змінна також впливає на інтерпретацію відповіді на -ok; хоча значення змінної LC_MESSAGES вибирає справжній взірець, який буде використано для інтерпретації відповіді на -ok, інтерпретація будь-яких виразів у фігурних дужках залежатиме від LC_COLLATE.

LC_CTYPE
    Значення цієї змінної впливає на обробку класів символів, які буде використано у формальних виразах, а також у перевірці -name, якщо відповідну підтримку передбачено у загальносистемній бібліотечній функції fnmatch(3). Значення цієї змінної також впливає на інтерпретацію будь-яких класів символів у формальних виразах, які буде використано для інтерпретації відповідь на запит, який надсилатиме -ok. Значення змінної середовища LC_CTYPE також впливатиме на те, які символи вважатимуться непридатними для друку при виведенні назв файлів; див. розділ «НЕЗВИЧАЙНІ НАЗВИ ФАЙЛІВ».

LC_MESSAGES
    Визначає локаль, яку буде використано для інтернаціоналізованих повідомлень. Якщо встановлено значення змінної середовища POSIXLY_CORRECT, ця змінна також визначає інтерпретацію відповіді на запит, який виконує дія -ok.

NLSPATH
    Визначає розташування каталогів інтернаціоналізації повідомлень.

PATH
    Впливає на те, у яких каталогах виконуватиметься пошук виконуваних файлів, які буде викликано -exec, -execdir, -ok і -okdir.

POSIXLY_CORRECT
    Визначає розмір блоку, який використовуватимуть -ls і -fls. Якщо встановлено значення POSIXLY_CORRECT, одиницями блоків будуть 512 байтів. Якщо значення не встановлено, одиницями будуть блоки у 1024 байтів.

    Встановлення значення цієї змінної також типово вимикає повідомлення з попередженнями (тобто, неявним чином встановлює -nowarn), оскільки POSIX вимагає, щоб, окрім виведення для -ok, усі повідомлення, що виводяться до stderr, були діагностичними і мали призводити до ненульового стану виходу.

    Якщо значення POSIXLY_CORRECT не встановлено, -perm +zzz буде оброблено як -perm /zzz, якщо +zzz не є коректним символьним режимом. Якщо значення POSIXLY_CORRECT встановлено, такі конструкції призводитимуть до помилки.

    Якщо встановлено POSIXLY_CORRECT, відповідь на запит, який надіслано дією -ok, буде оброблено на основі каталогу повідомлень системи, а не за власним перекладом повідомлення find.

TZ  Визначає часовий пояс для деяких з пов'язаних із часом інструкцій форматування для -printf і -fprintf.

ПРИКЛАДИ

  Простий підхід «find|xargs»

•   Знайти файли із назвою core у каталозі /tmp та усіх його підкаталогах та вилучити їх.

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

    Зауважте, що ця команда працюватиме некоректно, якщо у каталозі зберігаються будь-які файли із назвами, що містять символи нового рядка, одинарні або подвійні лапки чи пробіли.

  Безпечніший підхід «find -print0 | xargs -0»

•   Знайти файли із назвою core у каталозі /tmp та підлеглих каталогах і вилучити їх, обробивши назви файлів так, щоб файли та каталоги, назви яких міститимуть одинарні або подвійні лапки, пробіли або символи нового рядка, було оброблено належним чином.

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

    Програма виконує перевірку -name перед перевіркою -type, щоб уникнути виклику stat(2) для кожного файла.

Зауважте, що усе ще існуватиме конкуренція між моментом, коли find обходить ієрархію, виводячи назви відповідних файлів, і моментом, коли з цим файлом працюватиме процес, який виконуватиме xargs.

  Обробка довільних початкових точок

•   За складеним програмою proggy шляхом попереднього фільтрування величезним списком відокремлених NUL-символом назв файлів виконати обробку їх як початкових точок і знайти серед них усі звичайні порожні файли:

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

    Використання `-files0-from -` означає «прочитати назви початкових точок зі стандартного джерела вхідних даних, тобто з каналу даних; а -maxdepth 0 забезпечує те, що буде виконано інспектування лише отриманих записів, без рекурсивного переходу каталогами (якщо однією з початкових точок виявиться каталог).

  Виконання команди для кожного з файлів

•   Запустити файл для кожного файла у поточному каталозі та усіх його підкаталогах.

    $ find . -type f -exec файл '{}' \;

    Зауважте, що фігурні дужки взято у одинарні лапки, щоб захистити їх від обробки як пунктуації скриптів оболонки. Крапку з комою захищено символом зворотної похилої риски у подібний же спосіб, хоча тут теж можна було б скористатися одинарними лапками.

У багатьох випадках краще скористатися синтаксичною конструкцією `-exec ... +` або навіть `-execdir ... +` з міркувань швидкодії та безпеки.

  Обхід файлової системи один раз для виконання двох різних дій

•   Обійти файлову систему один раз, записавши список файлів set-user-ID та каталогів до /root/suid.txt, а великих файлів — до /root/big.txt.

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

    У цьому прикладі використано символ продовження рядка '\' у перших двох рядках. Так зроблено, щоб командна оболонка продовжувала читання команди на наступному рядку.

  Пошук файлів за віком

•   Шукати файли у вашому домашньому каталозі, до яких було внесено зміни протягом останніх двадцяти чотирьох годин.

    $ find $HOME -mtime 0

    Ця команда працює потрібним чином, оскільки час з моменту внесення останніх змін до файла буде поділено на 24 години, а лишок буде відкинуто. Це означає, що файл буде відповідним -mtime 0, якщо до нього було внесено зміни не більше, ніж 24 години тому.

  Пошук файлів за правами доступу

•   Пошук файлів, які є виконуваними, але не придатними до читання.

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

•   Шукати файли, для яких для власника і його групи встановлено права доступу до читання і запису, а для інших користувачів лише права на читання, але не запис.

    $ find . -perm 664

    Файли, які задовольняють ці критерії, але мають інші права доступу (наприклад, хтось може виконувати файл), вважатимуться невідповідними.

•   Шукати файли, для яких для власника і його групи встановлено права доступу до читання і запису, а для інших користувачів права на читання, не беручи до уваги наявність додаткових бітів прав доступу (наприклад, біта можливості виконання).

    $ find . -perm -664

    Відповідним вважатиметься, наприклад, файл із режимом доступу 0777.

•   Шукати файли, до яких хоч хтось може записувати дані (власник, група або хтось інший).

    $ find . -perm /222

•   Шукати файли, до яких може записувати дані їхній власник або його група.

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

    Усі ці три команди виконують те саме завдання, але у першій використано вісімкове представлення режиму доступу до файла, а у двох інших використано символьну форму. Щоб файли було визнано відповідними, не обов'язково, щоб право на запис до них одночасно було у власника і його групи; достатньо, щоб запис міг здійснювати власник або група.

•   Шукати файли, до яких може записувати дані їхній власник і його група.

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

    Обидві команди виконують одне завдання.

•   Складніший пошук за правами доступу.

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

    Обидві ці команди призначено для пошуку файлів, які можуть читати усі (-perm -444 або -perm -a+r), мають принаймні один встановлений під запису (-perm /222 або -perm /a+w), але не є виконуваними для усіх (! -perm /111 або ! -perm /a+x, відповідно).

  Обрізання — пропускання файлів і каталогів

•   Скопіювати вміст /source-dir до /dest-dir, але пропустити файли і каталоги із назвою .snapshot (і все, що у них зберігається). Також пропустити файли або каталоги, чия назва завершується на «~», але не вміст цих каталогів.

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

    Конструкція -prune -o \( ... -print0 \) є доволі поширеною. Ідея тут полягає у тому, що вираз перед -prune визначає те, що має бути вирізано. Втім, сама дія -prune повертає значення істинності, тому для наступних -o права частина визначатиметься лише для тих каталогів, які не було вирізано (програма навіть не вивчатиме вміст каталогів, які було вирізано, тому їхній вміст ні на що не вплине). Вираз у правій частині -o взято у дужки лише для ясності. Дужки підкреслюють, що дію -print0 буде застосовано лише до того, до чого не застосовано -prune. Оскільки типовий оператор «І» між перевірками має вищий пріоритет за -o, це все одно типова поведінка, але дужки допомагають розібратися у тому, що відбуватиметься при обчисленні.

•   За заданим каталогом проєктів і пов'язаних із ними адміністративних каталогів системи керування версіями виконати ефективний пошук кореневих каталогів проєктів:

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

    Зразок виведення:

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

    У цьому прикладі -prune запобігає зайвому спусканню ієрархією каталогів у каталогах, у яких вже виявлено потрібні дані (наприклад, ми не шукатимемо у project3/src, оскільки вже знайдено project3/.svn), але забезпечує виявлення каталогів на одному рівні ієрархії (project2 і project3).

  Інші корисні приклади

•   Пошук файлів декількох типів.

    $ find /tmp -type f,d,l

    Шукати файли, каталоги і символічні посилання у каталозі /tmp, передавши ці типи як список відокремлених комами значень (розширення GNU). Еквівалент довшого, але придатнішого для портування запису:

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

•   Шукати файли із назвою голка і зупинити пошук на першому ж знайденому файлі.

    $ find / -name голка -print -quit

•   Демонстрація інтерпретації інструкцій форматування %f і %h дії -printf у деяких рідкісних випадках. Приклад включення деяких виведених даних.

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

СТАН ВИХОДУ
find завершує роботу зі станом виходу 0, якщо усі файли було успішно оброблено, і з ненульовим станом виходу, якщо сталася помилка. Це навмисно дуже нечіткий опис, але якщо програма повертає ненульовий стан виходу, вам не варто вважати результати роботи find правильними.

Якщо станеться якась помилка, find може негайно припинити роботу без завершення усіх вказаних дій. Наприклад, можуть лишитися необробленими якісь початкові точки або може бути не виконано якість виклики програму у конструкціях -exec ... {} + або -execdir ... {} +.

ЖУРНАЛ

Програма find з'явилася у версії 5 Unix як частина проєкту «Programmer's Workbench», її було написано Діком Гайтом (Dick Haight). У книзі Дага Макілроя (Doug McIlroy) A Research UNIX Reader: Annotated Excerpts from the Programmer’s Manual, 1971-1986 подано додаткові подробиці; ви можете ознайомитися з ними тут: <https://www.cs.dartmouth.edu/~doug/reader.pdf>.

Першу версію GNU find було написано Еріком Декером (Eric Decker) і удосконалено Девідом Маккензі (David MacKenzie), Джеєм Плеттом (Jay Plett) та Тімом Вудом (Tim Wood). Автором ідеї find -print0 та xargs -0 був Ден Берстайн (Dan Bernstein).

СУМІСНІСТЬ
Починаючи з версії findutils-4.2.2, метасимволи оболонки (наприклад «*», «?» або «[]»), які використано у взірцях назв файлів, відповідають початковому символу «.», оскільки цього вимагає інтерпретація IEEE POSIX 126.

Починаючи з findutils-4.3.3, -perm /000 відповідає усім файлам, а не жодному.

Роздільність часових позначок у наносекунди було реалізовано у findutils-4.3.3.

Починаючи з findutils-4.3.11, дія -delete встановлює ненульовий стан виходу find, якщо станеться помилка. Втім, find не завершуватиме роботу одразу після помилки. У попередніх версіях find помилки у дії -delete не впливали на стан виходу з програми.
Можливість | Версія додавання | Також зустрічається у
-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

Синтаксичну конструкцію -perm +РЕЖИМ було вилучено у версії findutils-4.5.12. Замість неї слід використовувати -perm /РЕЖИМ. Синтаксична конструкція +РЕЖИМ вважалася застарілою з версії findutils-4.2.21, яку було випущено у 2005 році.

НЕ-ВАДИ

  Несподіванки у пріоритетності операторів
Команда find . -name файлА -o -name файлБ -print ніколи не виведе файлА, оскільки, фактично, вона є еквівалентною до find . -name файлА -o \( -name файлБ -a -print \). Слід пам'ятати, що -a має вищий пріоритет за -o, і що якщо між перевірками не вказано оператора, вважатиметься, що оператором є -a.

  Повідомлення про помилку “шляхи треба вказувати перед виразом”
$ find . -name *.c -print
find: шляхи треба вказувати перед виразом
find: можливий неекранований взірець після ключа «-name»?

Таке трапляється, якщо командна оболонка може розгорнути взірець *.c до декількох назв файлів, які зберігаються у поточному каталозі, і при передаванні отриманих назв файлів у рядку команди до find ось так:
find . -name frcode.c locate.c word_io.c -print
Ця команда, звичайно ж, не працюватиме, оскільки ключу -name можна передавати лише один взірець, як аргумент. Замість цього, вам слід взяти взірець у лапки або екранувати символ-замінник, таким чином, надавши find змогу використати взірець із символом-замінником під час пошуку відповідників назві файла, замість розгортання назв файлів у батьківській командній оболонці:
$ find . -name '*.c' -print
$ find . -name \*.c -print

ВАДИ
Існують невиправні проблеми зі захистом, пов'язані із поведінкою, яку для find визначає стандарт POSIX. Ці проблеми не можна усунути без порушення стандарту. Наприклад, неусувну небезпеку становить дія -exec. Замість неї слід використовувати дію -execdir.

Змінна середовища LC_COLLATE не впливає на роботу -ok.

ЗВІТИ ПРО ВАДИ
Мережева довідка щодо GNU findutils: <https://www.gnu.org/software/coreutils/E
Повідомляйте про будь-які помилки в перекладі на <https://translationproject.org/team/>

Про будь-які інші вади повідомляйте за допомогою форми у системі стеження за вадами GNU Savannah:
    <https://savannah.gnu.org/bugs/?group=findutils>
Обговорити загальні питання щодо пакунка GNU findutils можна у списку листування bug-findutils:
    <https://lists.gnu.org/mailman/listinfo/bug-findutils>

АВТОРСЬКІ ПРАВА
Авторські права © 1990–2024 Free Software Foundation, Inc. Ліцензія GPLv3+: GNU GPL версії 3 або пізнішої <https://gnu.org/licenses/gpl.html>.
Це вільне програмне забезпечення: Ви можете вільно змінювати і розповсюджувати його. БЕЗ ЖОДНИХ ГАРАНТІЙ, в межах, дозволених законом.

ДИВ. ТАКОЖ
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)

Повна документація: <https://www.gnu.org/software/findutils/find>
вона ж доступна локально: info find

ПЕРЕКЛАД
Український переклад цієї сторінки посібника виконано Andriy Rysin <arysin@gmail.com> і Yuri Chornoivan <yurchor@ukr.net>

Цей переклад є безкоштовною документацією; будь ласка, ознайомтеся з умовами GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html). НЕ НАДАЄТЬСЯ ЖОДНИХ ГАРАНТІЙ.

Якщо ви знайшли помилки у перекладі цієї сторінки підручника, будь ласка, надішліть електронний лист до списку листування перекладачів: trans-uk@lists.fedoraproject.org.