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

Помимо поиска файлов и каталогов, сочетание команды find с другими командами позволяет вам действовать в соответствии с результатами. Добавление параметра -exec позволяет системным администраторам запускать внешние команды и выполнять такие действия, как копирование, перемещение, удаление или изменение разрешений для файлов, соответствующих указанным критериям, таким как размер, имя и т. д.

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

Общий синтаксис команды поиска:

find {path} {name -of-file or dir-to-search} {action-to-take}

Где,

  • путь указывает каталог.
  • name-of-file or dir-to-search : имя файла или каталога для поиска
  • действие, которое необходимо выполнить: например, скопировать, удалить, переместить и т. д.

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

Оглавление

Найти файлы и каталоги

Поиск определенных файлов по имени или расширению

Чтобы найти определенный файл, выполните следующую команду из корня (/). Команда содержит точное имя файла, который вы ищете.

find . -name file22.txt

Выход

./test/file22.txt
./sales/file22.txt

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

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

find ./test -name file22.txt

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

В нашем случае мы будем искать все, начинающиеся с файла letter в тестовом каталоге.

find ./test -name file*

Выход

./test/file22.txt
./test/file30.doc
./test/file1.txt
./test/file5,doc

Поиск файлов по расширению

Чтобы найти файл в Linux с определенным расширением, добавьте его в команду.

find . -name *.txt

Выход

./test/subtest/subfil.txt
./test/file22.txt
./test/file1.txt
./home1/files32.txt
./home2/file22.txt
./qa/tags.txt

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

Используйте приведенную ниже команду для поиска файлов и каталогов, начинающихся с букв qa. На нашем компьютере есть файлы qatree.txt и qa.txt, а также каталог с именем qa.

  Как отключить брандмауэр UFW в Linux

Если мы запустим команду;

find ./ -name "qa*"

Он возвращает следующий вывод

./test/qatree.pdf
./test/qa.txt
./home/qa

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

Найти только файлы или каталоги

Только для файлов используйте переключатель типа f.

Только файлы

find ./ -type f -name "qa*"

Выход

./test/qatree.pdf
./test/qa.txt

Только каталоги

Добавьте опцию type d, чтобы найти только каталоги.

find ./ -type d -name "qa*"

Выход

./home/qa

Команда поиска без учета регистра

Все поиски с ключом -name чувствительны к регистру и не будут давать результаты с заглавными буквами. Чтобы получить все случаи, используйте параметр -iname.

find ./ -iname "qa*"

Выход

./test/qatree.pdf
./test/qa.txt
./test/QAtest.txt
./home/qa

Поиск файла из нескольких каталогов

Чтобы найти файлы в разных каталогах, добавьте их пути в команду. В нашем случае мы проверим тестовый и числовой каталоги.

find ./test ./numeric -name file22.txt -type f

Выход

./test/file22.txt
/root/numeric/file22.txt

Найти несколько файлов с разными расширениями из всех каталогов

Вы можете использовать команду find, чтобы найти несколько файлов с разными расширениями, такими как *.doc, *.txt, *.pdf и т. д. Это можно сделать отдельно, по одному расширению за раз или с помощью одной команды, которая включает все нужные расширения.

найти . -type f ( -name «*.txt» -o -name «*.pdf» -o -name «*.doc»)

выход

./test/subtest/subfil.txt
./test/qatree.pdf
./test/file22.txt
./test/qa.txt
./test/file30.doc
./books/acro.pdf
./data1/FILE22.txt
./docs/files32.txt

Найти файлы, содержащие определенный текст

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

Чтобы найти все файлы, содержащие слово «гиперконвергенция», используйте;

find / -type f -exec grep -l -i "hyperconvergence" {} ;

Выход

/root/numeric/hci
/root/HCIP

Опция –i позволяет команде игнорировать регистры и находит текст независимо от того, написан он с заглавной буквы или нет, т. е. гиперконвергенция, гиперконвергенция и т. д.

Чтобы искать файлы в определенном каталоге, просто добавьте их в команду

find ./numeric -type f -exec grep -l -i "hyperconvergence" {} ;

Выход

./numeric/hci

Ознакомьтесь с другими примерами команд grep.

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

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

Варианты размера включают в себя;

в — байты

к — килобайт

М — Мегабайты

Г – гигабайты

Найти файлы определенного размера — равно 30 МБ

Для поиска найдите все файлы размером 30 МБ.

find / -size 30M

Найти файлы больше указанного размера

find -size +2M

Выход

. /Downloads/ubuntu18043.iso 
./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f414305057 7a9c

Найти файлы размером менее 10 МБ в текущем каталоге

find . -type f -size -10M

Найдите файлы размером от 100 до 200 МБ.

При поиске файлов в пределах определенного диапазона, например, от 100 до 200 МБ

find / -size +100M -size -200M

Ищите каталоги размером более 20 КБ

найти / -тип d -размер +20k

Найдите пустые файлы и каталоги.

Файлы

найти ./ -тип f -размер 0

или же

find ./ -type f –empty

Каталоги

find ./ -type d –empty

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

Найти файлы старше n дней

find /path/ -type f -name '*.txt' -mtime +8

-mtime +8 будет искать текстовые файлы старше 8 дней.

По дате модификации

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

find . -mtime -17 -type f 

Ищет каталоги, измененные за последние 10 дней.

find . -mtime -10 -type d 

Поиск файлов на основе доступа или модификации

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

Для просмотра файлов, к которым не обращались в течение последних 10 дней в домашнем каталоге.

find /home -atime +10

Файлы доступны ровно 10 дней назад

find /home -atime 10

Доступ в течение последних 10 дней

find /home -atime -10

Найти файлы, измененные за последние n дней

Вы также можете найти файлы в каталоге /home, измененные за последние 10 дней, с помощью команды;

find /home -mtime -10 

Найти файлы, измененные в течение определенного периода.

Например, все файлы, измененные от 6 до 15 дней назад в домашнем каталоге.

find /home -type f -mtime +6 -mtime -15

Файлы и каталоги, к которым обращались в течение последних 10 минут

Чтобы найти файлы, к которым обращались в течение последних 10 минут, используйте параметр -amin.

find . -amin -10 -type f

Выход

./.bash_history
./[email protected]:~#

Каталоги, к которым обращались в течение последних 10 минут

find . -amin -10 -type d

Найти файлы, соответствующие определенным разрешениям

Синтаксис

$ find -perm mode

Где режим — это разрешение, которое может быть либо числовым, например 644, 655, 700, 777 и т. д., либо буквами, например u=x, a=r+x и т. д.

  Как использовать Nativefier для превращения веб-сайтов в приложения для Linux

Вы можете задать режим следующими тремя различными способами.

  • Без префикса, когда вы хотите найти файлы с точно указанными разрешениями.
  • С «-» для файлов с хотя бы указанным разрешением. Это возвращает файлы с указанными, а также дополнительными более высокими разрешениями.
  • Использование «/» требует указания владельца или группы с разрешением на файл.
  • Найти файлы с разрешением 777

    find -perm 777

    Выход

    ./file1

    Найдите файлы с размером не менее 766
    найти -пермь -766

    Выход

    ./file2
    ./file1

    Команда ищет все файлы, в которых

    • Владелец файла имеет права на чтение/запись/выполнение.
    • Группа имеет права на чтение/запись
    • Другие имеют разрешение на чтение/запись

    Таким образом, он возвращает два файла, соответствующих этому критерию — файл1 и файл2. Файлы не обязательно должны иметь точные разрешения 766 и могут иметь дополнительные разрешения такой же длины, но должны иметь как минимум указанные.

    Найти файлы, доступные для записи владельцу

    Теперь мы будем использовать «/» для поиска файлов, доступных для записи либо их владельцу, либо группе, либо другим лицам.

    find -perm /222
    .
    ./file2
    ./file3
    ./file1

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

    find -perm -220

    Выход

    ./file2
    ./file1

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

    Найти все файлы, принадлежащие Джеку

    find /home -user jack

    Выход

    /home/jack
    /home/jack/examples.desktop
    /home/jack/.gnupg
    /home/jack/.gnupg/private-keys-v1.d
    /home/jack/ans.cgi

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

    Найдите все текстовые файлы, принадлежащие Джеку.

    find /home -user jack -iname "*.txt"

    Выход

    /home/jack/docs/file32.txt

    Найдите и перечислите файлы и каталоги вместе с их разрешениями

    find -name "*.conf" | ls -l

    Выход

    total 120
    drwxr-xr-x 2 root root 4096 Dec 31 13:19 backup2
    drwxr-xr-x 2 root root 4096 Jan 4 11:57 Desktop
    drwxr-xr-x 2 root root 4096 Dec 31 11:50 Documents
    drwxr-xr-x 2 root root 4096 Dec 31 12:27 Downloads
    -rw-r--r-- 1 root root 0 Jan 4 12:02 file22.doc
    drwxr-xr-x 2 root root 4096 Jan 4 12:14 file23
    -rw-r--r-- 1 root root 0 Jan 4 12:23 file23.txt

    Найдите и действуйте в соответствии с результатами

    В этом разделе мы рассмотрим, как вы можете действовать с файлами, которые соответствуют шаблону, указанному в команде find.

    Поиск файлов и изменение разрешений

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

    [email protected]:~/ver$ ls -la
    
    total 8
    drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 .
    drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 ..
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php
    -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 base.php
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php
    -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 qust.php
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php
    -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 vary.php

    Теперь мы будем искать все файлы PHP (выше) и заменим их разрешения на 755.

    find ver -name "*.php" -type f -exec chmod 755 {} ;

    Команда ищет файлы PHP в каталоге ver, а затем устанавливает для них разрешение 755 (rwxr-xr-x).

    Полученные результаты

    [email protected]:~/ver$ ls -la
    total 8
    drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 .
    drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 ..
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 base.php
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 qust.php
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php
    -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 vary.php

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

    Найдите файлы с разрешениями 644 и измените их на разрешения 655.

    find . -type f -perm 644 -exec chmod 655 {} ;

    Вы также можете найти каталоги с правами 644 и заменить их на 755.

    find . -type d -perm 644

    Выход

    ./docs   

    Папка docs имеет 644 разрешения.

    drwxrwxr-x 2 jack jack 4096 Jan 3 12:45 docs

    Чтобы установить его на 755, мы запускаем

    find . -type d -perm 644 -exec chmod 755 {} ;

    Теперь мы можем еще раз проверить, что именно 755

    find . -type d -perm 755

    Выход
    .
    ./документы

      Как установить приложение для общения команды Flock в Linux

    Сверху мы видим, что корневые каталоги и каталоги документов имеют разрешения 755.

    Команда Ls –la дает следующие данные

    drwxr-xr-x 2 jack jack 4096 Jan 3 12:45 docs

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

    Найти и скопировать определенный файл в каталог

    Приведенная ниже команда найдет файл file22.txt и скопирует его в каталог ~/tmp/images.

    find -iname file22.txt -exec cp {} ~/tmp/images ;

    Найдите и скопируйте один тип файлов в каталог

    Чтобы найти файлы, такие как изображения с расширением jpg, в текущем каталоге и скопировать их в другое место, например в папку с изображениями, используйте;

    find -iname '*.jpg' -exec cp {} ~/tmp/images ;

    Это найдет и скопирует все файлы jpg в папку ~/tmp/images.

    Найдите и скопируйте один файл во многие каталоги

    Найдите и скопируйте один в несколько каталогов.

    find ~/tmp/dir1/ ~/tmp/dir2/ $HOME/3/ -maxdepth 0 -exec cp ~/numeric/hci {} ;

    Это найдет файл hci и скопирует его в три каталога /tmp/dir1/, /tmp/dir2/ и $HOME/3/.

    Найти и переместить файлы в другой каталог

    Чтобы переместить известный файл из каталога в другой. Переместить файл universal.php;

    find ~/folder/ -type f -name universal.php -exec mv {} ~/numeric/ ;

    Поиск и перемещение файлов с определенным расширением в другую папку

    find ~/numeric/ -type f -name '*.php' -exec mv {} ~/folder/ ;

    Найдите определенные файлы и перейдите в другую папку

    find -type f -name uni*.* -exec mv {} ~/unifiles/ ;

    Команда ищет все файлы с именами, начинающимися с uni и имеющими любое расширение. Затем он перемещает их в каталог /unifiles/

    Поиск и перемещение файлов по возрасту

    Найдите и переместите файлы старше указанного числа дней в другое место, например в архив.

    find /path/ -type f -name '*.pdf' -mtime +20 -exec mv {} /backup1/ ;

    Это будет искать файлы PDF старше 20 дней и перемещать их в каталог backup1.

    Поиск и удаление файлов и каталогов

    Синтаксис для поиска и удаления файлов или каталогов в текущем каталоге:

    найти . -type f -name «файл для удаления» -exec rm -f {} ; удалить только файлы или

    найти . -type d -name «каталог для удаления» -exec rm -rf {} ; удалять только каталоги

    Найти и удалить только определенные файлы

    Чтобы найти и удалить файлы, начинающиеся с til, используйте;

    find . -type f -name "til*" -exec rm {} ; 

    Чтобы найти и удалить каталоги, начинающиеся с til

    find . -type d -name "til*" -exec rm {} ;

    Удалить как файлы, так и каталоги

    find . -name "til*" -exec rm -rf {} ; 

    Это удалит как файлы, так и каталоги, начинающиеся с букв til.

    Удалить по расширению

    Ниже показано, как найти и удалить все текстовые файлы в текущем каталоге. Замените txt другим расширением, таким как bak, pdf или любым другим, которое вы хотите удалить.

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

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

    find . -type f -name "*.txt" -exec rm -i {} ;

    Выход

    rm: remove regular empty file './File22.txt'? y
    rm: remove regular empty file './file22.txt'? y
    rm: remove regular empty file './file23.txt'?

    По умолчанию -rm не удаляет каталоги, и вам необходимо использовать параметр –r, чтобы обеспечить рекурсивное удаление. Это гарантирует удаление пустых каталогов и каталогов, содержащих файлы. Параметр -f вызывает принудительное удаление и используется как для файлов, так и для каталогов.

    Найти и удалить файлы старше n дней

    Найдите и удалите файлы резервных копий старше 20 дней из текущего каталога.

    find . -type f -name '*.bak' -mtime +20 -exec rm {} ;

    Это приведет к удалению всех файлов .bak старше 20 дней.

    Найти и удалить только каталоги

    Чтобы удалить каталог с именем dir22

    find . -type d -name dir22 -exec rm -rf {} ;

    Убедитесь, что вы соответствуете регистру имени каталога, или используйте параметр -iname.

    find . -type d -iname Dir22 -exec rm -rf {} ;

    Удаляет как Dir22, так и dir22

    Для подтверждения перед удалением используйте параметр -i.

    find . -type d -iname Dir22 -exec rm -rf -i {} ;

    Выход
    rm: удалить каталог ‘./Dir22’? н
    rm: удалить каталог ‘./dir22’? у

    В нашем случае мы ввели n для каталога Dir22, который не будет удален, и y для каталога dir22, который теперь будет удален.

    Найти и удалить пустые файлы

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

    find ./ -type f -size 0 -exec rm -f {} ;

    или же
    найти ./ -тип f -размер 0 | xargs rm -f
    или же
    найти ./ -тип f -размер 0 –удалить

    Найти и удалить пустые каталоги

    Чтобы удалить пустые каталоги, мы будем использовать параметр d.

    find ./ -type d -empty -exec rmdir {} ;

    Другой альтернативой является использование удаления вместо удаления.

    find ./ -type d -empty -delete

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

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

    Что дальше?

    Идите вперед и попробуйте приведенные выше команды поиска Linux в своей лаборатории или НЕПРОИЗВОДСТВЕННОЙ среде. Посмотрите, можете ли вы использовать некоторые из них для автоматизации очистки файловой системы с помощью Crontab. И, чтобы освоить Linux, проверьте это онлайн курс.