Linux команда find. 25 простых примеров.

1. Перечисление всех файлы в текущем и подкаталогах

Эта команда выводит список всех файлов в текущем каталоге, а также подкаталогов в текущем каталоге.

  $ find
 ./abc.txt
 ./subdir
 ./subdir/how.php
 ./cool.php 

тоже самое

$ find .
$ find . -print 

2. Поиск в определенном каталоге или пути

  • Поиск всех файлов в каталоге ./test.
  $ find ./test
 ./тест
 ./test/abc.txt
 ./test/subdir
 ./test/subdir/how.php
 ./test/cool.php 
  • Поиск файлов по имени.
  $ find ./test -name "abc.txt"
 ./test/abc.txt 
  • Поиск по маски
  $ find ./test -name "* .php"
 ./test/subdir/how.php
 ./test/cool.php 

Все подкаталоги ищутся рекурсивно. Это прекрасный способ найти все файлы с заданным расширением.

Поиск в каталоге «/» ( корневой). Будет выполнять поиск по всей файловой системе, включая подключенные устройства и сетевые устройства хранения. Будьте внимательны. В любой момент можно остановить команду, нажав Ctrl + C

В примере выше,если каталог на самом деле является символической ссылкой, то НУЖНО указать завершающий слеш, чтобы команда отработала правильно (find ./test/ ...)

Игнорировать регистр

  • Чтобы игнорировать регистр, надо использовать опцию «iname» вместо опции «name».
  $ find ./test -iname "* .Php"
 ./test/subdir/how.php
 ./test/cool.php 

Имя параметра желательно обернуть в кавычки.

3. Ограничить глубину вложенности каталогов

По умолчанию команда find рекурсивно перемещается по всему дереву каталогов, требует много времени и ресурсов. Однако глубина обхода каталога может быть указана. Например, мы не хотим опускаться более чем на 2 или 3 уровня в подкаталогах. Это делается с помощью опции maxdepth.

  $ find ./test -maxdepth 2 -name "* .php"
 ./test/subdir/how.php
 ./test/cool.php
 $ find ./test -maxdepth 1 -name * .php
 ./test/cool.php 

Во втором примере используется maxdepth 1, буде произведен поиск в подкаталогах уровня и только в текущем каталоге.

Это полезно, если хотим ограничить поиск только в текущем каталоге или в подкаталогах с максимальным уровнем 1, а не во всем дереве каталогов, на что потребовалось бы больше времени.

Так же, как и maxdepth, существует опция под названием mindepth. Она пропустит как минимум N уровней каталогов, прежде чем начнет искать файлы.

4. Инвертировать совпадение

  • Команда исключает не нужные файлы в поиске.
  $ find ./test -not -name "* .php"
 ./тест
 ./test/abc.txt
 ./test/subdir 

В примере выше мы нашли все файлы, которые не имеют расширения php, либо не-php файлы.

  • Команда find также поддерживает восклицательный знак вместо not.
  find ./test!  -name "* .php" 

5. Объединение несколько критериев поиска

  $ find ./test -name 'abc *'!  -name '* .php'
 ./test/abc.txt
 ./test/abc 
  • Приведенная выше команда поиска ищет файлы, начинающиеся с abc и не имеющие расширения php. Это пример того, какие мощные поисковые выражения можно построить с помощью команды find.

Оператор OR

  • При использовании нескольких критериев имен команда find объединяет их оператором AND, что означает, что будет поиск только тех файлов, которые удовлетворяют всем критериям. Однако если нужно выполнить OR (или то или другое), для этого команда find имеет ключ o.
  $ find -name '* .php' -o -name '* .txt'
 ./abc.txt
 ./subdir/how.php
 ./abc.php
 ./cool.php 
  • команда выполняет поиск файлов, с расширением php, либо с расширением txt.

6. Поиск только файлы или только каталоги

  $ find ./test -name abc *
 ./test/abc.txt
 ./test/abc
  • Только файлы
 $ find ./test -type f -name "abc *"
 ./test/abc.txt
  • Только каталоги
 $ find ./test -type d -name "abc *"
 ./test/abc 

7. Поиск в нескольких каталогов одновременно

  $ find ./test ./dir2 -type f -name "abc *"
 ./test/abc.txt
 ./dir2/abcdefg.txt 

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

  • Скрытые файлы в Linux начинаются с точки.
  $ find ~ -type f -name ". *" 

9. Поиск файлов с определенными разрешениями

  • Используется ключ -perm. Следующая команда ищет файлы с разрешением 0664
  $ find .  -type f -perm 0664
 ./abc.txt
 ./subdir/how.php
 ./abc.php
 ./cool.php 
  • Полезно для поиска файлов с неправильными разрешениями, которые могут привести к проблемам с безопасностью. Инверсия также может применяться к проверке разрешений.
  $ find . -type f !  -perm 0777
 ./abc.txt
 ./subdir/how.php
 ./abc.php
 ./cool.php 

10. Поиск файлов с установленными битами sgid / suid

  • Следующая команда находит все файлы с разрешением 644 и установленным битом sgid.
find / -perm 2644 
  • Ключ -perm поддерживает использование альтернативного синтаксиса вместо восьмеричных чисел.
$ find / -maxdepth 2 -perm /u=s 2>/dev/null
/bin/mount
/bin/su
/bin/ping6
/bin/fusermount
/bin/ping
/bin/umount
/sbin/mount.ecryptfs_private
  • 2>/dev/null удаляет строки «Отказано в доступе»

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

  • Найти все файлы только для чтения.
$ find /etc -maxdepth 1 -perm /u=r
/etc
/etc/thunderbird
/etc/brltty
/etc/dkms
/etc/phpmyadmin
 ... вывод усечен ... 

12. Поиск исполняемых файлов

  • Следующая команда найдет исполняемые файлы
$ find /bin -maxdepth 2 -perm /a=x
/bin
/bin/preseed_command
/bin/mount
/bin/zfgrep
/bin/tempfile
... вывод усечен ... 

13. Поиск файлов, принадлежащие определенному пользователю

  • Найти все файлы в текущей директории владельца bob.
$ find . -user bob
.
./abc.txt
./abc
./subdir
./subdir/how.php
./abc.ph
  • Можно указать имя файла или любые критерии, связанные с именем, наряду с критериями пользователя.
$ find . -user bob -name '*.php'
  • Можно выстраивать критерий за критерием ссужая поиск.

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

  • Найти все файлы, которые принадлежат к определенной группе.
find /var/www -group developer
  • Можно искать в домашнем каталоге, используя символ ~.
$ find ~ -name "hidden.php"

Поиск файлов и каталогов по дате и времени изменения

  • Другой замечательный критерий поиска, который поддерживает команда find, - это дата/время изменение или доступа к файлу. Это очень удобно, когда мы хотим выяснить, какие файлы были изменены за определенный промежуток времени или даты. Вот несколько примеров

15. Найти файлы, модифицированные N дней назад

  • Найти все файлы,измененые 70 дней назад.
find / -mtime 70 

16. Поиск файлов, к которым обращались за последние N дней

  • Найти все файлы, к которым обращались за последние 5 дней.
find / -atime 5

17. Поиск файлов, измененных в течение нескольких дней

  • все файлы, измененные от 50 до 100 дней назад.
find / -mtime +50 –mtime -100 

18. Поиск файлов, измененных за последние N минут.

  • Поиск файлов, измененных за последний 1 час в папке bob.
$ find /home/bob -cmin -60 

19. Файлы, измененные за последний час

  • Найти все файлы, которые были изменены за последний 1 час.
find / -mmin -60 

20. Поиск файлов, к которым был доступ за последний час

find / -amin -60 

21. Поиск файлов заданного размера

Поиск файлов и каталогов в зависимости от размера.

  • Чтобы найти все файлы размером 50 МБ.
find / -size 50M 

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

  • Найти все файлы, больше, чем 50 МБ и меньше, чем 100 МБ.
$ find / -size + 50M -size -100M 

23. Поиск самых большие и самых маленьких файлов

Команду find при использовании в сочетании с командой ls и sort можно использовать для вывода списка самых больших файлов.

  • Команда отобразит 5 самых больших файлов в текущем каталоге и его подкаталоге. Может занять время в зависимости от общего количества файлов.
$find . -type f -exec ls -s {} \; | sort -n -r | head -5
  • При сортировке в порядке возрастания, первыми будут показаны самые маленькие файлы
$ find . -type f -exec ls -s {} \; | sort -n | head -5

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

  • Ключ -empty

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

find / tmp -type f -empty 
  • Поиск пустых каталогов
  $ find ~ / -type d -empty 

25. Листинг найденных файлов

$ find . -exec ls -ld {} \;
drwxrwxr-x 4 enlightened enlightened 4096 Aug 11 19:01 .
-rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:25 ./abc.txt
drwxrwxr-x 2 enlightened enlightened 4096 Aug 11 16:48 ./abc
drwxrwxr-x 2 enlightened enlightened 4096 Aug 11 16:26 ./subdir
-rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:26 ./subdir/how.php
-rw-rw-r-- 1 enlightened enlightened 29 Aug 11 19:13 ./abc.php
-rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:25 ./cool.php

26. Удаляем найденные файлы или каталоги

  • Удаляем все текстовые файлы в каталоге tmp.
$ find /tmp -type f -name "* .txt" -exec rm -f {} \;
  • Удаляем все каталоги в каталоге tmp.
$ find /tmp -type d -name "* .txt" -exec rm -f {} \;
  • Удаляем файлы с размером более 100Мб
$ find /home/bob/dir -type f -name *.log -size +100M -exec rm -f {} \;

С КОМАНДНОЙ rm БУДЬТЕ КРАЙНЕ ОСТОРОЖНО

Резюме

Краткое руководство по команде Linux find . Команда find - позволяет легко выполнить поиск файлов. Нужна всем системным администраторам.