Команда find используется для нахождения файлов и каталогов.
Классическое использование - это поиск по имени файла. Обратите внимание, что между параметром -name и значением "*page*" знак равно "=" не ставится!
find . -name "*page*"
где
- . - каталог, откуда начинать поиск
- * - любой набор символов
- ? - любой символ
Поиск по умолчанию идёт регистрозависимый. Чтоб находить файлы безразлично к регистру символов, нужно искать с опцией -iname.
Каталогов, откуда начинать поиск, может быть несколько. В этом случае поиск будет вестись в нескольких каталогах. То есть, вполне допустима следующая команда:
find ~/work/develop/bash ~/work/develop/cpp -type f
Дополнительные опции
Поиск по типу осуществляется опцией -type X, возможные значения X:
- f - обычный файл
- d - каталог
- l - символьная ссылка
Логические операции соединения условий
Если условия идут друг за другом, то такие условия считаются объединеннми логическим AND. Для объединения AND так же предусмотрены опции -a и -and. Следующие команды эквивалентны:
find . expr1 expr2
find . expr1 -a expr2
find . expr1 -and expr2 (этот вариант POSIX-несовместим)
Для объединения условий операцией OR, используются опции -o или -or:
find . expr1 -o expr2
find . expr1 -or expr2 (этот вариант POSIX-несовместим)
Логическое отрицание делается опциями ! или -not:
find . ! expr1
find . -not expr1 (этот вариант POSIX-несовместим)
Выполнение команд над найденными файлами
Выполнение команд над найденными файлами производится с помощью опции -exec:
find . -iname "*.php" -exec iconv -f CP1251 -t UTF-8 -o tmpfile {} \; -exec mv tmpfile {} \;
В этой команде имя найденного файла подставляется вместо символов {}. Завершение команды обязательно должно производиться символами \;. Как видно из данного примера, можно писать несколько команд, каждая в своей опции -exec.