Find синтаксис. Команда find: широкие возможности для поиска файлов в Linux. Поиск файлов с помощью команды locate

Бывает, что вы знаете, что файл или каталог существует, но не знаете, как его найти. Существует несколько команд, которые помогут вам в этом: find , locate и which .

4.10.1. Команда find

Команда find имеет следующий формат:

Find путь образец_для_поиска

Если вы не укажете путь, find начнет поиск заданного образца с текущего каталога и продолжит его по всем имеющимся в нем подкаталогам.

Команда find имеет множество опций, ознакомиться с которыми можно, прочитав man-страницу (введите в командной строке man find). Чаще всего используется опция -name , которая задает поиск всех файлов и каталогов, содержащих в названии определенное сочетание букв.

Find . -name tes

Эта команда задает поиск в текущем каталоге всех файлов, содержащих в названии «tes ».

4.10.2. Команда locate

С помощью этой команды вы можете увидеть все файлы или каталоги, названия которых содержат искомый образец. Например, для поиска файла, содержащего в названии слово dog , введите в командной строке:

Locate dog

Команда locate использует базу данных для определения местонахождения файлов или каталогов, содержащих в названии слово dog . Результаты поиска могут включать файл с названием dog , файл с названием bulldog.txt , каталог с названием /dogs/ и так далее. Чтобы узнать больше о команде locate , обратитесь к ее man-странице (введите в командной строке man locate).

При условии, что база данных обновлена, команда locate осуществляет поиск очень быстро. Обновление базы данных команды locate происходит каждую ночь при помощи службы cron .

cron - это небольшая программа, которая запускается в фоновом режиме и выполняет различные задачи (такие как обновление базы данных команды locate) через определенные промежутки времени. Для доступа к руководству cron наберите в командной строке man cron .

cron периодически обновляет базу данных slocate , которая используется для определения местонахождения файлов или каталогов. Переключение между операционными системами и отключение машины в конце дня препятствует автоматическому обновлению базы данных при помощи cron .

Чтобы обновить базу данных вручную, войдите в систему как root (набрав в командной строке su - и введя пароль root"а) и наберите в командной строке updatedb .

Через некоторое время база данных slocate , используемая командой locate , обновится.

Закончив работу, для выполнения которой необходимо быть root"ом, наберите в командной строке exit - вы вернетесь в вашу сессию.

Очень важно уметь вовремя и очень быстро найти нужную информацию в системе. Конечно, все современные файловые менеджеры предлагают отличные функции поиска, но им не сравнится с поиском в терминале Linux. Он намного эффективнее и гибче обычного поиска, вы можете искать файлы не только по имени, но и по дате добавления, содержимому, а также использовать для поиска регулярные выражения. Кроме того, с найденными файлами можно сразу же выполнять необходимые действия.

В этой статье мы поговорим о поиске с помощью очень мощной команды find Linux, подробно разберем ее синтаксис, опции и рассмотрим несколько примеров.

Find - это одна из наиболее важных и часто используемых утилит системы Linux. Это команда для поиска файлов и каталогов на основе специальных условий. Ее можно использовать в различных обстоятельствах, например, для поиска файлов по разрешениям, владельцам, группам, типу, размеру и другим подобным критериям.

Утилита find предустановлена по умолчанию во всех Linux дистрибутивах, поэтому вам не нужно будет устанавливать никаких дополнительных пакетов. Это очень важная находка для тех, кто хочет использовать командную строку наиболее эффективно.

Команда find имеет такой синтаксис:

find [папка] [параметры] критерий шаблон [действие]

Папка - каталог в котором будем искать

Параметры - дополнительные параметры, например, глубина поиска, и т д

Критерий - по какому критерию будем искать: имя, дата создания, права, владелец и т д.

Шаблон - непосредственно значение по которому будем отбирать файлы.

Основные параметры команды find

Я не буду перечислять здесь все параметры, рассмотрим только самые полезные.

  • -P никогда не открывать символические ссылки
  • -L - получает информацию о файлах по символическим ссылкам. Важно для дальнейшей обработки, чтобы обрабатывалась не ссылка, а сам файл.
  • -maxdepth - максимальная глубина поиска по подкаталогам, для поиска только в текущем каталоге установите 1.
  • -depth - искать сначала в текущем каталоге, а потом в подкаталогах
  • -mount искать файлы только в этой файловой системе.
  • -version - показать версию утилиты find
  • -print - выводить полные имена файлов
  • -type f - искать только файлы
  • -type d - поиск папки в Linux

Критерии

Критериев у команды find в Linux очень много, и мы опять же рассмотрим только основные.

  • -name - поиск файлов по имени
  • -perm - поиск файлов в Linux по режиму доступа
  • -user - поиск файлов по владельцу
  • -group - поиск по группе
  • -mtime - поиск по времени модификации файла
  • -atime - поиск файлов по дате последнего чтения
  • -nogroup - поиск файлов, не принадлежащих ни одной группе
  • -nouser - поиск файлов без владельцев
  • -newer - найти файлы новее чем указанный
  • -size - поиск файлов в Linux по их размеру

Примеры использования

А теперь давайте рассмотрим примеры find, чтобы вы лучше поняли, как использовать эту утилиту.

1. Поиск всех файлов

Показать все файлы в текущей директории:

2. Поиск файлов в определенной папке

Показать все файлы в указанной директории:

Искать файлы по имени в текущей папке:

find . -name "*.jpg"

Не учитывать регистр при поиске по имени:

find . -iname "test*"

3. Ограничение глубины поиска

Поиска файлов по имени в Linux только в этой папке:

find . -maxdepth 1 -name "*.php"

4. Инвертирование шаблона

Найти файлы, которые не соответствуют шаблону:

find . -not -name "test*"

5. Несколько критериев

Поиск командой find в Linux по нескольким критериям, с оператором исключения:

find . -name "test" -not -name "*.php"

Найдет все файлы, начинающиеся на test, но без расширения php. А теперь рассмотрим оператор ИЛИ:

find -name "*.html" -o -name "*.php"

6. Несколько каталогов

Искать в двух каталогах одновременно:

find ./test ./test2 -type f -name "*.c"

7. Поиск скрытых файлов

Найти скрытые файлы:

find ~ -type f -name ".*"

8. Поиск по разрешениям

Найти файлы с определенной маской прав, например, 0664:

find . type f -perm 0664

Найти файлы с установленным флагом suid/guid:

find / -perm 2644

find / -maxdepth 2 -perm /u=s

Поиск файлов только для чтения:

find /etc -maxdepth 1 -perm /u=r

Найти только исполняемые файлы:

find /bin -maxdepth 2 -perm /a=x

9. Поиск файлов по группах и пользователях

Найти все файлы, принадлежащие пользователю:

find . -user sergiy

Поиск файлов в Linux принадлежащих группе:

find /var/www -group developer

10. Поиск по дате модификации

Поиск файлов по дате в Linux осуществляется с помощью параметра mtime. Найти все файлы модифицированные 50 дней назад:

find / -mtime 50

Поиск файлов в Linux открытых N дней назад:

find / -atime 50

Найти все файлы, модифицированные между 50 и 100 дней назад:

find / -mtime +50 –mtime -100

Найти файлы измененные в течении часа:

11. Поиск файлов по размеру

Найти все файлы размером 50 мегабайт:

find / -size 50M

От пятидесяти до ста мегабайт:

find / -size +50M -size -100M

Найти самые маленькие файлы:

find . -type f -exec ls -s {} \; | sort -n -r | head -5

Самые большие:

find . -type f -exec ls -s {} \; | sort -n | head -5

12. Поиск пустых файлов и папок

find /tmp -type f -empty

$ find ~/ -type d -empty

13. Действия с найденными файлами

Для выполнения произвольных команд для найденных файлов используется опция -exec. Например, выполнить ls для получения подробной информации о каждом файле:

find . -exec ls -ld {} \;

Удалить все текстовые файлы в tmp

find /tmp -type f -name "*.txt" -exec rm -f {} \;

Удалить все файлы больше 100 мегабайт:

find /home/bob/dir -type f -name *.log -size +10M -exec rm -f {} \;

Выводы

Вот и подошла к концу эта небольшая статья, в которой была рассмотрена команда find. Как видите, это одна из наиболее важных команд терминала Linux, позволяющая очень легко получить список нужных файлов. Ее желательно знать всем системным администраторам. Если вам нужно искать именно по содержимому файлов, то лучше использовать команду .

Сразу хочу заметить что существует множество разных способов для реализации поиска в Linux. Сейчас, например очень сильно развивается проект beagle. Но я буду говорить о стандартных методах поиска в Linux и Unix. А именно я хочу описать пользование набором программ findutils.

Из набора программ, содержащихся в этом пакете, нас будет интересовать только find и xargs.
Начнем с find. Команда find представляет собой универсальный инструмент для поиска, она позволяет искать файлы и каталоги, просматривать все каталоги в системе или только заданный, искать на файлы заданную глубину и файлы с указанными атрибутами. Обычно пользователи знают что для поиска в Linux существует команда find, но использования этой команды заканчивается на двух трех известных опциях. Для эффективного же поиска, желательно изучить большинство доступных опций.

Использование:
find [-H] [-L] [-P] [путь...] [выражение]

-P — никогда не следовать символьным ссылкам. Эта опция включена по умолчанию;
-L - следовать символьным ссылкам. При этом команда find показывает информацию о файле, на который указывает данная ссылка.
-H — не следовать символьным ссылкам за исключением когда обрабатываются аргументы командной строки. Информация берется из самой ссылки

Путь по умолчанию: текущий каталог; выражение по умолчанию: -print; выражение может состоять из операторов, опций, тестов и действий:

операторы (в порядке уменьшения приоритета; -and берется по умолчанию, если не дано других):
(EXPR) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2
EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2

опции, зависящие от положения (всегда верно): -daystart -follow -regextype

обычные опции:
-depth —help -maxdepth УРОВНИ -mindepth УРОВНИ -mount -noleaf
—version -xdev -ignore_readdir_race -noignore_readdir_race

тесты: (N могут быть +N или -N или N): -amin N -anewer ФАЙЛ -atime N -cmin N
-cnewer ФАЙЛ -ctime N -empty -false -fstype ТИП -gid N -group ИМЯ
-ilname ШАБЛОН -iname ШАБЛОН -inum N -ipath ШАБЛОН -iregex ШАБЛОН
-links N -lname ШАБЛОН -mmin N -mtime N -name ШАБЛОН -newer ФАЙЛ
-nouser -nogroup -path ШАБЛОН -perm [+-]РЕЖИМ -regex ШАБЛОН
-wholename ШАБЛОН -size N -true -type -uid N
-used N -user ИМЯ -xtype

действия: -delete -print0 -printf ФОРМАТ -fprintf ФАЙЛ ФОРМАТ -print
-fprint0 ФАЙЛ -fprint ФАЙЛ -ls -fls ФАЙЛ -prune -quit
-exec КОМАНДА; -exec КОМАНДА {} + -ok КОМАНДА;
-execdir КОМАНДА; -execdir КОМАНДА {} + -okdir КОМАНДА;

Опишем наиболее используемые из них:

- name - поиск файлов, имена которых соответствуют заданному шаблону;
- print — поместить запись полных имен найденных файлов в стандартный поток вывода;
- perm — поиск файлов по режиму доступа;
- user — поиск файлов принадлежащих данному пользователю
-nouser — поиск файлов принадлежащих не существующему пользователю, т.е. которого нет в /etc/passwd;
-group — аналогично с -user, только для группы;
-nougroup — аналогично -nouser, только для несуществующей группы;
- mtime -n (+n) — поиск файлов которые модифицировались менее чем -n или более чем +n дней назад;
- atime — поиск по дате -последнего чтения;
- ctime -последнего изменения атрибутов файла;
- type — поиск указанного типа файлов. Т.е. f — обычный файл, d — каталог и т.д.;
- size n — поиск файлов размером n единиц; единицы: c — байт, k — килобайт, b -блок (в зависимости от системы);
- mount — поиск в текущей файловой системе;
- exec — выполнение команды shell для найденных файлов.

Примеры использования команды find:
$ find /home -user serhiy
Найти все файлы в директории /home и всех поддиректориях принадлежащие пользователю serhiy

$ find ~ -name *.c
В вашей домашней директории найдет все файлы с расширением.с. Например helloworld.c

$ find . -name "*"
В текущем каталоге и его подкаталогах найдет файлы начинающиеся с большой буквы. Заметте что выражение для поиска задано в «…».
Для поиска файлов, которые вы не модифицировали какое-то время, используйте ключ «-mtime», а для файлов, у которых определенное время назад не менялись права доступа, используйте «-ctime». Число после символа «+» задает количество дней (суток). Для того, чтобы узнать какие файлы были модифицированы сегодня, попробуйте:
find . -mtime -1 -print
Эта команда покажет вам, какие файлы были модифицированы за последние сутки. Заметьте, что для указания времени «меньше чем» следует указать знак «-».
$ find /var/www/ -mtime -10
Найти файлы в каталоге /var/www/ и его подкаталогах которые были изменены менее чем 10 дней назад.
$ find /var/www/ -mtime +30 -name "*.php"
Найти все.php файлы в каталоге /var/www/ и его подкаталогах которые были изменены более чем 30 дней назад.
найдем файлы, которые не читали более чем (условие «более чем» задается знаком «+») 30 дней:
find . -atime +30 -print
$ find . -perm 777
Найти все файлы в текущем каталоге, которые имеют права доступа 777.

Я думаю, поняв эти примеры, Вы сможете легко найти нужные вам файлы в Linux. Следующим шагом будет совместное использование find и xargs.

Выше я уже упоминал о опции -exec. С помощью этой опции команда find передает указанному интерпритатору shell все найденный файлы для исполнения, которые обрабатываются один раз. Но могут быть трудности с тем, что длина командной строки может быть ограничена, поэтому если файлов слишком много, система выдаст ошибку. Команда xargs как раз решает эту проблему. Дело в том, что эта команда обрабатывает файлы полученные от find не сразу все, как -exec, а порциями.
Рассмотрим некоторые примеры использования find c xargs:
$ find . -perm 777 | xargs rm
Команда find находит в данном каталоге файлы с атрибутами 777, и команда rm удаляет их.

Или скажем вы хотите найти в домашнем каталоге файл name.c и изменить его права доступа на 777:
$ find ~ -name name.c | xargs chmod 777
И еще один пример поиск в файлах:
$ grep -ri "???" * ,
где ‘???’ — искомое значения

Если вы запустите эту команду от имени непривилегированного пользователя в системном каталоге, то наверняка получите массу сообщений типа:
$ find: ./backup/pgsql: Permission denied
Избавиться от них поможет следующий приём:
$ find ./ -name "milter-spa*" 2>/dev/null
То есть сообщения об ошибках (2 – это дескриптор потока STDERR) мы просто выкидываем, оставляя лишь нормальный вывод STDOUT.
Так же вы можете также удалять файлы, соответствующие критериям поиска или даже применять к ним любую произвольную команду. В этом и заключается мощь утилиты find.
$ find test -nouser -delete
Этой командой мы одним махом удалим все файлы в каталоге test, не имеющие владельца (т.е. UID которых не фигурируют в базе учётных записей). Понятно, что таким образом можно удалить и всё, найденное по критерию -name или любому другому. Будьте осторожны!
$ find ./ -name "*.py" -exec cat {} \;
А так можно вывести на экран содержимое всех скриптов на Python (если точнее, то файлов, имеющих расширение.py). Обратите внимание на непонятную конструкцию «{}» – в процессе выполнения она будет заменена результатом поиска, т.е. cat получит в качестве параметров список соответствующих файлов. Точка с запятой в конце тоже обязательна – это указание для find, что опция exec закончилась. Чтобы «;» не интерпретировалась оболочкой, не забывайте его экранировать.
При необходимости всегда можно воспользоваться богатым набором опций для поиска файлов на основании их временных атрибутов (времени модификации, доступа и т. д.).
$ find ./ -atime +90d -size +20 -exec tar cjf old.tbz2 {} \;
Этой страшной конструкцией мы упакуем в архив все файлы больше 10 килобайт (20 блоков по 512 байт; в GNU-версии утилиты можно указывать размер и непосредственно в кило/мега/гигабайтах), к которым никто не обращался более трёх месяцев.
Критерии поиска могут быть самыми разнообразными – по типу файла (каталог, символическая ссылка, регулярный файл и т. д.), по владельцу и группе (опции -user и -group), по выставленным на файле флагам и правам доступа (-flags и -perm соответственно). Для поиска без учёта регистра символов используйте -iname, в более сложных случаях к вашим услугам опция -regex. Можно даже учитывать тип файловой системы (например, при выполнении какого-то действия не принимать во внимание файлы, доступные через NFS).
Утилита find обладает развитым языком составления выражений, когда различные критерии поиска можно группировать с использованием логических операций (разбор оставлю вам в качестве упражнения):
$ find ./ -iname "qwe*" -and -size +20 -or -name "Qwert"
Показанным выше возможности find не исчерпываются – это всего лишь несколько примеров из возможных. Не поленитесь прочитать справку (man find), особенно обращая внимания на приведённые там примеры. И жить в консоли сразу станет проще, жить станет веселей.

В Linux есть очень мощная и полезная команда для поиска файлов — команда find . Она обладает большим количеством возможностей для поиска файлов, однако, иногда вызывает сложности у новичков во многом из-за ее синтаксиса.

Простой пример использования команды find

Для начала рассмотрим простой пример использования команды find для поиска на компьютере файлов с именем config . Мы будем искать файлы config , начиная с корневого каталога / . Для этого вам нужно выполнять команду от имени пользователя root , чтобы иметь достаточно прав доступа, иначе получите сообщения «Permission denied». Итак, выполним команду:

Find / -name config -print

Команда означает следующее: искать файлы с именем config (-name config), начиная с каталога / (первый параметр команды find) и выводить имена файлов на экран (аргумент -print). Отмечу, что поиск рекурсивный, то есть при поиске просматриваются все вложенные директории. Как видите все просто. Теперь рассмотрим синтаксис команды и перейдем к обзору ее основных аргументов.

Синтаксис команды find

Общий синтаксис команды find , который вы можете найти в справочном руководстве, может показаться не совсем простым, поэтому я приведу более удобный для восприятия:

Find [путь] [опции] [критерии поиска] [действия над файлами]

Путь

В качестве пути для поиска можно использовать как абсолютные, так и относительные пути, а также список путей, разделенных пробелом.

Опции

Опции команды find указываются, начиная с символа «-», за которым следует название опции. Рассмотрим основные опции.

Критерии поиска

У команды find может быть несколько критериев поиска (их также называют tests). Каждый критерий представляет собой определенное условие проверки, которое возвращает либо true либо false . Это можно сравнить с условиями оператора if в программировании. В процессе обработки очередного файла команда find по очереди проверяет каждый критерий, и если очередной критерий возвращает false , тогда команда find переходит к следующему файлу. Критериев у команды find довольно много, мы рассмотрим только некоторые из них.

-atime N Последний раз к файлу обращались N дней назад.
-mtime N Последнее изменение файла было N дней назад.
-name шаблон Имя файла (шаблон имени) без указания пути. Рекомендуется всегда заключать шаблон в кавычки.
-newer другой_файл Файл был изменен позже, чем другой_файл.
-size [±] N Размер файла равен N блокам, если указано +N , тогда размер файла больше N , -N — меньше. Символ после N означает размер блока. b — 512 байт, с — байт, w — 2 байта, k — килобайт, M — мегабайт, G — гигабайт.
-type C Файл типа C . Наиболее часто используемые значения для С: d — каталог, f — файл.
-user Имя_пользователя Файл принадлежит пользователю с именем Имя_пользователя.

Примеры использования команды find с использованием критериев

Найти в текущем каталоге обычные файлы (не каталоги), имя которых начинается с символа «~».

Find . -type f -name "~*" -print

Найти в текущем каталоге файлы, измененные позже, чем файл file.bak .

Find . -newer file.bak -type f -print

Операторы

Критерии можно объединять, используя операторы. Ниже приведены операторы в порядке убывания их приоритета.

В общем случае при использовании операторов критерии проверяются в порядке их приоритета. Изменить порядок можно с помощью скобок. Скобки нужно выделять с помощью обратного слеша.

Примеры использования команды find с использованием операторов

Найти в текущем каталоге файлы, начинающиеся с символа «~» или c «temp» и являющиеся именно обычными файлами (-type f), а не каталогами.

Find . \(-name "~*" -or -name "temp*" \) -type f -print

Найти в текущем каталоге (не обрабатывая подкаталоги — -maxdeph 1) обычные файлы (-file f) размером больше 600 мегабайт и менее 1 гигабайта (-size) или файлы имя которых заканчивающиется на «.mpeg» (-name).

Find . -maxdepth 1 \(\(-size +600M -and -size -1G \) -or -name "*.mpeg" \) -and -type f

Действия над файлами

Когда выполняется команда find , вы можете выполнять различные действия над найденными файлами. Рассмотрим основные из них.

В выполняемых командах вы можете использовать параметр {} в качестве аргумента, который заменяется путем к текущему файлу.

Примеры использования команды find с использованием действий

Найти в текущем каталоге обычные файлы размером больше 1000 байт и выполнить над ними команду ls -dils (действие ls).

Find . -size +1000c -type f -ls

Найти в текущем каталоге обычные файлы, начинающиеся с символа тильда «~», и для каждого файла выдавать запрос на его удаление (на выполнение команды rm).

Find . -name "~*" -type f -ok rm {} \;

Заключение

В заметке мы рассмотрели очень важную и полезную Linux команду find , которая предоставляет практически неограниченные возможности для поиска файлов по многим критериям и шаблонам. А с использованием команд (действий) вы можете искать файлы и выполнять над ними любые операции.

Одна из наиболее распространенных проблем, с которыми сталкиваются пользователи, впервые работающие с Linux — поиск нужных файлов. В данном руководстве рассмотрено использование команды find, которая позволяет решить эту проблему и осуществлять поиск файлов с различными фильтрами и параметрами.

Поиск по имени

Это наиболее очевидный способ поиска файлов. Для поиска по имени введите:

Find -name "имя"

Этот запрос будет чувствительным к регистру, то есть “file” и “File” будут восприниматься как разные имена.

Для поиска по имени без учёта регистра введите:

Find -iname "имя"

Если вам требуется найти все файлы, не соответствующие определенному шаблону, можно инвертировать поиск при помощи параметра “-not” или “!”. При использовании “!” нужно экранировать символ, чтобы bash не попытался интерпретировать его до начала работы find:

Find -not -name "исключаемое_имя"

Find \! -name "исключаемое_имя"

Поиск по типу

Вы можете указать тип файлов, которые вам нужно найти, при помощи параметра «-type» Это работает следующим образом:

Find -type дескриптор_типа запрос

Вот наиболее распространенные дескрипторы типа:

f: обычный файл
d : директория
l: символическая ссылка
c: символьные устройства
b: блочные устройства

Например, если нам нужно найти все символьные устройства в системе, можно выполнить следующую команду:

А так мы можем выполнить поиск всех файлов, которые заканчиваются на «.conf»:

Find / -type f -name "*.conf"

Поиск по времени и размеру

Find предоставляет ряд способов фильтрации результатов по размеру и времени.

Поиск по размеру

Фильтрация по размеру осуществляется при помощи параметра «-size».

После значения размера нужно указать суффикс, обозначающий единицы измерения. Вот несколько наиболее распространенных вариантов:

c: байты
k: килобайты
M: мегабайты
G: гигабайты
b: блоки по 512 байт

Чтобы найти все файлы с размером ровно 100 байт, введите:

Find / -size 100c

Для поиска всех файлов меньше 100 байт мы можем воспользоваться следующей формой:

Find / -size -100c

Для поиска файлов больше 500 мегабайт можно использовать следующую команду:

Find / -size +500M

Поиск по время

Linux хранит данные о времени доступа, времени модификации и времени изменения.

  • Время доступа: время последнего чтения файла или записи в него.
  • Время модификации: время последнего изменения содержимого файла.
  • Время изменения: время последнего изменения метаданных в индексном узле (inode) файла.

Для фильтрации по этим значениям мы можем использовать параметры «-atime», «-mtime» и «-ctime», соответственно, а также символы плюса и минуса для поиска файлов с более ранним или поздним временем, аналогично фильтрации по размеру.

Значение этих параметров указывает, на сколько дней назад нужно осуществлять поиск.

Для поиска файлов, содержимое которых было изменено вчера, введите:

Find / -mtime 1

Если нам нужны файлы, к которым осуществлялся доступ вчера и позже, можно воспользоваться командой:

Find / -atime -1

Чтобы получить файлы, метаданные которых были изменены более трёх дней назад, воспользуйтесь следующей командой:

Find / -ctime +3

Также существуют дополнительные параметры, которые позволяют указывать минуты вместо дней. Эта команда выдает файлы, измененные за последнюю минуту:

Find / -mmin -1

Кроме того, find может выполнять сравнение с заданным файлом и выводить все файлы новее:

Find / -newer myfile

Поиск по владельцу и разрешениям

Используя параметры «-user» и «-group», можно осуществлять поиск файлов по владельцу или группе, соответственно. Чтобы найти файл пользователя «syslog», нужно ввести:

Find / -user syslog

Аналогично можно задать поиск файлов группы «shadow»:

Find / -group shadow

Также можно искать файлы с определенными разрешениями.

Если нам нужно соответствие точному набору разрешений, используется следующая форма:

Find / -perm 644

При необходимости найти все файлы с разрешениями не ниже указанных нужно ввести:

Find / -perm -644

Этому критерию будут соответствовать все файлы с дополнительными разрешениями. Например, в данном случае ему будет соответствовать файл с разрешениями «744».

Фильтрация по глубине

Для этого раздела нам потребуется создать во временной директории трехуровневую структуру директорий с десятью директориями на первом уровне. В каждой директории (включая временную) будет десять поддиректорий и десять файлов.

Создадим структуру выполнением следующих команд:

Mkdir -p ~/test/level1dir{1..10}/level2dir{1..10}/level3dir{1..10} touch ~/test/{file{1..10},level1dir{1..10}/{file{1..10},level2dir{1..10}/{file{1..10},level3dir{1..10}/file{1..10}}}} cd ~/test

Для проверки структуры можно воспользоваться командами ls и cd. Разобравшись в организации нужно вернуться в тестовую директорию:

Cd ~/test

Теперь попробуем найти в этой структуре конкретные файлы. Начнем с примера обычного поиска по имени:

Find -name file1

Результатов очень много. Если мы переведем вывод на счётчик, мы увидим, что всего таких файлов 1111:

Find -name file1 | wc -l 1111

В большинстве случаев эти результаты избыточны. Давайте попробуем сузить поиск.

Можно задать максимальную глубину поиска в директории поиска верхнего уровня:

Find -maxdepth число -name имя

Чтобы найти «file1» только в директориях «level1» и выше, нужно указать максимальную глубину, равную 2 (1 для директории верхнего уровня и 1 для директорий уровня 1):

Find -maxdepth 2 -name file1

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter .