ryg

Find. Команда терминала в Mac OS X

Назначение

Утилита поиска проверяет все файлы из дерева каталогов для каждого из путей указанных в параметрах. Утилита производит рекурсивный поиск в дереве каталогов указанных в качестве параметров path подходящих по условиям указанным в expression (возможно использование примитивов  "primaries" и "operands")

Синтаксис

     find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression]
     find [-H | -L | -P] [-EXdsx] -f path [path ...] [expression]

Параметры

-E Интерпретировать регулярные выражения следующие за -regex и -iregex как расширенные выражения.  
-H Сообщать информацию о файле и о его типе для каждой символьной ссылки указанной в командной строке. Информация выдается о файле на который ссылается, а не о самой ссылке. Если файл по ссылке не существует, то будет выдана информация о ссылке. Информация о символьных ссылках не указанных непосредственно в командной строке будет о самих ссылках.
-L Сообщать информацию о файлах и их типе , а не о символьных ссылках указывающих на него (встречных в поиске) и только в случае если файл на который ссылаются отсутствует вывести информацию о самой ссылке.
-P Параметр по умолчанию. Возвращать информацию (тип файла и параметры)  по символьной  ссылке, а не о файле на который она ссылается.
-X Разрешение использовать поиск вместе с параметрами xargs. Если имя файла содержит разделяющие символы используемые xargs файл будет пропущен и будет выдано сообщение об ошибке. Разделяющими символами являются : одиночный и двойной апострофы, обратный слэш, пробел, табуляция и символ перевода строки.
-d

Сначала проходит поиск по самим папкам и лишь потом по их содержимому.

Аналогично параметру -depth (в primary) согласно стандарту IEE Std 1003.1-2001 ("POSIX.1"). Полезна если могут встретиться папки с запрещенными правами.  Позволяет убедиться перед размещением файлов в папке, что есть права на запись в нее.

 -f Задать иерархический поиск. Иерархия файлов может быть определена сразу после указания данного параметра.
-s Иерархический поиск с учетом сортировки по алфавиту. Сортировка проходит отдельно в каждой папке. Замечание: поиск с 'find -s ' и 'find | sort' может выдавать различные результаты
-x Предотвращает поиск вниз по папкам, которые имеют другой номер устройства от начального. 

PRIMARIES

Все primaries которые используют числовой аргумент требуют использование знака плюс (" + ") или минус (" - "). Минус означает меньше чем число, плюс означает больше чем число за ним, отсутствие знака означает за исключением указанного числа.

-Bmin n "ИСТИНА" если различия между временем с ожиданием файла и временем начала поиска составляет n минут. (Округляется до следующей полной минуты)
-Bnever file Аналогично -newerBm.
-Btime n[smhdw]

Если не указано единица измерения времени, то данный примитив будет истинным если временем создания файла и временем начала поиска будет в пределах одних суток (в оригинале 24-часовой период). n - указывает на количество таких периодов.

Если единица измерения определена, то ИСТИНА будет если разница между созданием файла и началом поиска будет n-единиц.

Описание единиц измерения есть в параметре -atime

-acl Данный примитив может быть использован в сочетании с другими для локальных файлов с расширением ACL
-amin n ИСТИНА в случае разницы между последним обращением к файлу и началом поиска (округленному до полной минуты) в n-минут
-anewer file Аналогично -neweram
-atime n[smhdw]

Если не указано единица измерения времени , то данный примитив будет истинным если между последним обращением к файлу и временем начала поиска будет в пределах одних суток (в оригинале 24-часовой период). n - указывает на количество таких периодов.

Если единица измерения определена, то ИСТИНА будет если разница между последним обращением к файлу и началом поиска будет n-единиц.

Возможно использовать следующие единицы измерения:
s    секунды
m   минуты (60 сек)
h    час (60 минут)
d    день (24 часа)
w   неделя (7 дней)
 
Возможна комбинация единиц измерения, например
"-atime -1h30min"  Полезно помнить про модификаторы "+" и "-".
-cmin n ИСТИНА если между временем последнего изменения и началом поиска прошло n-минут (округление до минут вверх)
-cnewer file Аналогично -newercm
-ctime n[smhdw]

Если не указано единица измерения времени , то данный примитив будет истинным если между последней модификацией файла и временем начала поиска будет в пределах одних суток (в оригинале 24-часовой период). n - указывает на количество таких периодов.
     Если единица измерения определена, то ИСТИНА будет если разница между последним изменением файла и началом поиска будет n-единиц.

-d Аналогично depth. 
-delete  Удалять найденные файлы и/или папки. Всегда возвращает ИСТИНУ. Выполняется в текущей (рабочей) папке и вниз по дереву. Не будет пытаться удалять файлы с именем содержащим "/" и начинающиеся с точки (".") по соображениям безопасности. Следование по символьным ссылкам несовместимо с данным параметром.
-depth Всегда истинно. Аналогично -d
-depth n Истинно если глубина нахождения файла от стартовой точки прослеживается n
-empty Истинно если текущая папка или файл пустые
-exec utility [argument ...]; ИСТИНА если программа указанная в utility возвращает "0". Необязательные argument передается в качестве параметров utility. Выражение должно заканчиваться  точкой с запятой ";". Если в команде в любом месте встретятся фигурные скобки   "{}" - они будут заменены на полное имя текущего файла. 
-exec utility [argument ...] {} + Аналогично -exec, за исключением того, что замена "{}" замена на имя файла происходит при каждом вызове utility
-execdir utility [argument ...];  Аналогично -exec, но символы '{}' заменяются не на имя файла, а на путь к нему.
-execdir utility [argument ...] {} + Аналогично -execdir, но замена происходит при каждом обращении к вызываемой программе utility
-flags [-|+]flags,noflags

flags описываются аналогично как в утилите chflags. также можно использовать приставку no (например 'nohidden').

Если перед списком флагов используется минус '-', то примитив возвращает истину в случае все биты из списка флагов выставлены и отсутствуют и noflags (логическое "И"). Если установлен плюс "+", то чтобы возвращаемое значение было ИСТИНА достаточно, чтобы хотя бы один бит флагов сайта совпадал с указанным.

-fstype type Истина, если файл находится в файловой системе указанного типа type. Посмотреть типы используемых файловых систем можно с помощью команды lsvfs. Дополнительно можно использовать виртуальные типы 'local' и 'rdonly'.
-gid gname Данный параметр существует для обеспечения совместимости GNU. Однако GNU запрещает использовать числовые значения gname, а find в Mac OS X нет.
-group gname ИСТИНА если файл принадлежит группе gname. Если gname задано в числовой форме, то сначала проверяется нет ли группы с таким именем, если нет, число используется как ID группы.
-ignore_readdir_race Этот параметр добавлен для совместимости с GNU и в OS X игнорируется.
-ilname pattern Как -lname, но не чувствительна к регистру. Это расширение для совместимости с GNU.

-lname pattern

Так же как и -name, но нечувствительна к регистру.
-inum n Истина если inode файла n.
-ipath pattern аналогично -path, но нечувствительна к регистру.
-iregex pattern аналогично -regex, но нечувствительна к регистру.
-iwholename pattern аналогично -ipath, добавлено для совместимости с GNU.
-links n Истина если файл имеет n ссылок
-lname pattern Для совместимости с GNU
-ls Всегда возвращает "ИСТИНА". Выводится следующая информация: номер inode, размер в 512-байтных блоках, права на доступ к файлу количество ссылок, владелец, группа владельцев, размер в байтах, время последнего изменения, путь. Если файл является блоком или специальным символьным файлом, номер устройства будет выведен после размера в байтах. Если файл является ссылкой путь к файлу на который ссылаются будет после символов "->". Формат вывода идентичен отображению результатов в команде "ls -dgils".
-maxdepth n Результат всегда ИСТИНА.  Не искать в папках глубина которых больше исходной на n-уровней. Если данный параметр указан, то его действие распространяется на всю командную строку. Если n не указано, то его значение принимается равным "0"  и поиск происходит только по указанным в командной строке файлам.
-mindepth n Результат всегда ИСТИНА.  Не искать в папках глубина которых меньше исходной на n-уровней. Если параметр -mundepth указан, то его действие распространяется на всю командную строку. Если n не указано, то его значение принимается равным "1"  и поиск происходит ниже определенных в командной строке файлов.
-mmin n ИСТИНА, если разница времени между последним изменением файла и началом поиска n-минут. Округляется до минуты. вверх
-mnewer file Аналогично -newer
-mount Аналогично -xdev. Добавлено для совместимости с GNU.
-mtime n[smhdw] Если параметр единиц измерения определен, то ИСТИНА если время последнего изменения файла и началом поиска составляет n-единиц. Если не определен то за единицу принимается день. Подробно об единицах измерения времени в команде find описано в параметре -atime.
-name pattern ИСТИНА если последний компонент пути (имя файла) будет совпадать с шаблоном pattern. для фильтра можно использовать символы шаблона поиска ("[" , "]", "*" и "?"). Если они используются не как символы шаблона, а явно передними необходимо поставить обратный слэш "\".
 -newer file ИСТИНА если время изменения файла позже чем время указанного файла.
-newerXY file

ИСТИНА если время (описанное в XY) более свежее чем у file

Параметры XY заменяются на:

X -описывает текущий файл, а Y -file
Подставляемые символы могут быть:
a -последнее обращение к файлу
B -Время создания файла
c - изменение (change time)
m -модификация (modification time)

Замечание -nevermm аналогично -never

-nogroup ИСТИНА если файл принадлежит неизвестной группе.
-noignore_readdir_race Этот параметр добавлен для совместимости с GNU и в OS X игнорируется.
-noleaf Добавлено для совместимости с GNU. В Mac OS X игнорируется.
-nouser ИСТИНА если файл  принадлежит  неизвестному пользователю.
-ok utility [argument ...] ; Идентично -exec, за исключением того что utility печатает сообщение и ждет подтверждения действий. Если ответ не 'y' (в POSIX -системе) утилита не исполняется и возвращает ЛОЖЬ
-okdir utility [argument ...] ; Идентично -execdir, но с требованием подтверждения как -ok.
 -path pattern ИСТИНА если последний путь к файлу будет совпадать с шаблоном pattern. для фильтра можно использовать символы шаблона поиска ("[" , "]", "*" и "?"). Если они используются не как символы шаблона, а явно передними необходимо поставить обратный слэш "\".
-perm [-|+]mode mode задается либо в символьном виде, либо восьмеричным кодом аналогично как в команде chmod.
-print Данный примитив всегда возвращает "ИСТИНА". Печатает путь к файлу и имя на стандартное устройство вывода. 
-print0 Аналогично -print, но после каждой строки вставляет "0".
-prune Всегда возвращает ИСТИНА. Поиск не спускается вниз по дереву файлов. Не работает если определен параметр -d
-regex pattern

ИСТИНА если файл попадает в условия совпадающие с выражением pattern. Пример выражения:

для поиска файла "./foo/xyzzy" можно использовать выражения типа "./[xyz]*" или ".*/foo/.*", но не "xyzzy" или "/foo/".

-samefile name ИСТИНА если файл является жесткой ссылкой на файл name. Если дополнительно используется параметр -L, то ИСТИНА буде возвращена и если файл является символьной ссылкой на файл name.
-size n[ckMGTP]

ИСТИНА если размер файла округленный до 512-блоков совпадает с указанным в n. Если добавлено буквенное обозначение размера то сравнение производится на основании заданного размера, а не 512-байтных блоков. Допустимые единицы измерения:

c    в байтах 
k    К-байтах (1024 байта)
M   Мбайтах (1024 Кбайт)
G   Gбайтах (1024 Мбайт)
T    Тбайтах (1024 Gбайт)
P    петабайтах (1024 Тбайт)

-type t

Истина если тап файла совпадает с заданным в качестве параметра t. Может иметь следующие значения:

b  специальный блок
c  специальные символы
d  папка 
f   обычный файл
l   символьная ссылка
p  FIFO
s  сокет

-uid uname То же самое, что и -user uname, добавлено для обеспечения совместимости с GNU. Однако в отличие от GNU find понимает числовой код user ID
-user uname ИСТИНА, если владельцем файла является пользователь с именем uname. Если вместо имени задан ID, то сначала ищется пользователь с именем равным ID и если такого нет производится поиск по ID
-wholename pattern Аналогично -path, добавлено для обеспечения совместимости с GNU.
-xattr ИСТИНА если файл имеет расширенные атрибуты
-xattrname name ИСТИНА если файл имеет расширенный атрибут указанный в поле name

ОПЕРАТОРЫ

Примитивы могут комбинироваться с помощью операторов:
(expression) возвращает истину, если выражение в скобках истинно
! expression или -not expression  Оператор NOT возвращает ИСТИНА если expression ЛОЖЬ
-false  всегда ЛОЖЬ
-true   всегда ИСТИНА
expression1 -and expression2 Логическое "И"
expression1 -or expression2 Логическое "ИЛИ".

Примеры

		find / \! -name "*.c" -print
Вывести список всех файлов имя которых заканчивается на ".c"
		find / -newer ttt -user wnj -print
Вывести файлы принадлежащие пользователю wnj и измененных после последнего изменения файла ttt
		find / \! \( -newer ttt -user wnj \) -print
Вывести файлы не принадлежащие пользователю wnj и измененных раньше последнего изменения файла ttt
		find / -newerct '1 minute ago' -print
Вывести все файлы которые были изменены раньше чем текущее время минус 1 минута
		find / -type f -exec echo {} \;
Использовать команду echo для вывода списка всех стандартных файлов.
		find -L /usr/ports/packages -type l -exec rm -- {} +
Удалить все символьные ссылки из папки /usr/ports/packages, которые указывают на несуществующие файлы
		find /usr/src -name CVS -prune -o -depth +6 -print
Найти файлы и папки находящиеся на "глубине" 7 уровней от папки /usr/src

Связанные команды

chflags -изменить флаги файла или папки
chmod -изменить права доступа к фалу
cvs -
locate - искать файлы
ls - вывести список файлов
lsvfs
whereis
which

Весь список команд терминала Mac OS X