простых!). Если операция не указана явно, то подразумевается -and, т. е. вместо (-name*.txt -and – name*.doc) можно записать просто (-name*.txt -name*.doc). Если применяется только одна операция -and или !, то скобки обычно можно опустить, а с операцией -or и в сложных выражениях скобки необходимы. Перед скобкой нужно поставить обратную косую черту, а после скобки – пробел. Например, если вы хотите найти каталог по его имени, то можно сделать это командой
[user]$ find /usr -name doc -type d
или (с соблюдением правил построения сложных критериев)
[user]$ find /usr (-name doc -and -type d )
В следующем примере мы ищем файлы по такому критерию: либо имя файла оканчивается на*.tmp, либо размер файла больше 100 Кбайт.
[user]$ find /home/kos ((-name*.tmp ) -or (-size +200 ) )
В последнем примере стоит обратить внимание на то, что перед значением размера стоит знак ‘+’. Такой знак можно использовать с любым числовым параметром в критериях поиска команды find. Он означает, что нужно искать файлы, у которых значение параметра больше заданного. Соответственно, знак ‘-‘ означает, что надо искать файлы, у которых значение параметра меньше заданного. Если знаки + или – отсутствует, ищутся файлы, у которых значение параметра равно заданному.
Чтобы закончить рассмотрение команды find, надо сказать еще о том, что после критерия поиска в этой команде можно сразу же задать операцию, которая будет применяться ко всем файлам, найденным по указанному критерию. Простейшим примером использования такой возможности является указание команды -print.
[user]$ find /home/kos -name*.tmp -print
по которой выдается на экран список имен всех найденных файлов с указанием полного пути к файлу. Эта операция применяется по умолчанию, т. е. когда никаких операций вообще не указано (как это было во всех приведенных выше примерах). Другим примером операции, применяемой ко всем найденным файлам, может служить операция -exec cmd {} ;, где cmd – произвольная команда оболочки shell. То есть в этом случае ко всем найденным файлам (их именами заменяются поочередно фигурные скобки) применяется команда cmd. За cmd {} в этом случае должна следовать точка с запятой, экранированная обратной косой чертой.
Например, если вы хотите удалить в текущем каталоге все файлы, к которым пользователи не обращались в течение 30 дней, дайте команду:
[root]# find. -type f -atime +30 -exec rm {} ;
Вместо -exec можно поставить -ok, тогда перед выполнением указанной команды cmd применительно к каждому файлу будет запрашиваться подтверждение.
В общем, команда find является очень мощным, полезным и чрезвычайно адаптируемым инструментом поиска в файловой системе. Все ее возможности здесь не перечислены, изучайте соответствующую man-страницу. И будьте очень осторожны с применением таких возможностей команды, как вызов других команд, применяемых ко всем найденным файлам. Помните, что изменения часто необратимы!