Мы нашли все тот же файл на нашей машине, но на сей раз гораздо быстрее и без поиска в смонтированных файловых системах.
Полная синтаксическая запись команды find
выглядит следующим образом:
find [
Часть записи [
понятна и проста: вы можете указать абсолютный путь поиска, например, /bin
, или относительный, например ..
При необходимости можно задать несколько путей — например, find /var /home
.
В табл. 2.10 перечислены основные опции команды.
Опция | Описание |
---|---|
-depth | Поиск в подкаталогах перед поиском в самом каталоге |
-follow | Следовать по символическим ссылкам |
-maxdepths | При поиске проверять не болееN |
-mount (или -xdev ) | Не искать в каталогах других файловых систем |
Теперь о критериях. В команде find
можно задать большое число критериев, и каждый из них возвращает либо true
, либо false
. В процессе работы команда find
рассматривает по очереди каждый файл и применяет к нему все критерий в порядке их определения. Если очередной критерий возвращает значение false
, команда find
прекращает анализ текущего файла и переходит к следующему; если критерий возвращает значение true
, команда применяет следующий критерий к текущему файлу или совершает заданное действие над ним. В табл. 2.11 перечислены самые распространенные критерии; полный список тестов, которые можно применять в команде find
, вы найдете на страницах интерактивного справочного руководства.
Критерий | Описание |
---|---|
-atime | К файлу обращались последний раз дней назад |
-mtime | Файл последний раз изменялся дней назад |
-name | Имя файла без указания пути соответствует заданному шаблону. Для гарантии того, что шаблон будет передан в команду find и не будет немедленно обработан командной оболочкой, его следует всегда заключать в кавычки |
-newer | Текущий файл, измененный позже, чем |
-type | Файл типа , где может принимать определенные значения; наиболее широко используемые "d " для каталогов и "f " для обычных файлов. Остальные обозначения типов можно посмотреть на страницах интерактивного справочного руководства |
-user | Файл принадлежит пользователю с заданным именем |
Вы также можете объединять критерии с помощью операторов. Как показано в табл. 2.12, у большинства из них две формы записи: короткая и более длинная форма.
Оператор, короткая форма | Оператор, длинная форма | Описание |
---|---|---|
! | -not | Инвертирование критерия |
-а | -and | Оба критерия должны быть истинны |
-о | -or | Один из критериев должен быть истинным |
Изменить порядок проверки критериев и выполнения операторов можно с помощью скобок. Поскольку в командной оболочке у них есть особое назначение, скобки также следует выделять с помощью обратного слэша. Кроме того, если вы применяете шаблон для имени файла, то следует использовать кавычки, чтобы оболочка не выполняла подстановку имени, а прямо передала шаблон команде find
. Например, если вы хотите задать критерий "измененный позже, чем файл X
, или с именем, начинающимся со знака подчеркивания", его можно записать следующим образом:
\(-newer X -о -name "_*" \)
Мы приведем пример сразу после описания "Как это работает". А сейчас выполните упражнение 2.16.
find
с критериямиПопытаемся найти в текущем каталоге файлы, измененные после модификации файла while2.
$ find . -newer while2 -print
.
./elif3
./words.txt
./words2.txt
./_trap
$
Все чудесно, за исключением того, что вы нашли ненужный вам текущий каталог. Вас интересуют только обычные файлы, поэтому добавьте дополнительный критерий -type f
.
$ find . -newer while2 -type f -print
./elif3
./words.txt
./words2.txt
./_trap
$
Как это работает