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 на усіх
рівнях
оптимізації
і
забезпечує
однакові
результати
для
кожного з
них.
Частина
рядка
команди
після
списку
початкових
точок є
виразом.
Це тип
специфікації
запитів,
який
описує, які
файли є
відповідними
та те, що
слід
зробити з
відповідними
файлами.
Вираз
складається
з такої
послідовності
елементів:
- Перевірки
- Перевірки
повертають
значення
істинності
або
хибності,
зазвичай,
на основі
певних
властивостей
інспектованого
файла.
Наприклад,
перевірка
-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 (див.
ДИВ.
ТАКОЖ)
описано
значення і
відмінності
від
різними
типами
формальних
виразів.
- -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 для
таких
відповідностей).
Якщо ви
спробуєте
шукати
таку
відповідність,
програма
видасть
попередження,
якщо не
встановлено
значення
змінної
середовища
POSIXLY_CORRECT.
Метасимволи
(«*», «?» та «[]»)
відповідають
«.» на
початку
базової
назви (цю
зміну
впроваджено
у findutils-4.2.2; див.
розділ
ВІДПОВІДНІСТЬ
СТАНДАРТАМ
нижче). Щоб
програма
проігнорувала
каталог і
усі файли у
ньому,
скористайтеся
-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.
- -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.
- •
- Знайти
файли із
назвою core у
каталозі
/tmp та усіх
його
підкаталогах
та
вилучити
їх.
$ find /tmp -name core -type f -print | xargs /bin/rm -f
Зауважте,
що ця
команда
працюватиме
некоректно,
якщо у
каталозі
зберігаються
будь-які
файли із
назвами, що
містять
символи
нового
рядка,
одинарні
або
подвійні
лапки чи
пробіли.
- •
- Знайти
файли із
назвою 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 ... {} +.
Починаючи
з версії 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:
Обговорити
загальні
питання
щодо
пакунка GNU findutils
можна у
списку
листування
bug-findutils:
Авторські
права © 1990-2022 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
<
[email protected]> і Yuri Chornoivan <
[email protected]>
Цей
переклад є
безкоштовною
документацією;
будь ласка,
ознайомтеся
з умовами
GNU
General Public License Version 3 НЕ
НАДАЄТЬСЯ
ЖОДНИХ
ГАРАНТІЙ.
Якщо ви
знайшли
помилки у
перекладі
цієї
сторінки
підручника,
будь ласка,
надішліть
електронний
лист до
списку
листування
перекладачів:
[email protected]