Команды поиска 'find' в Linux: подробный гайд

Команды поиска в Linux — подробный гайд по Find

Программирование

Find в Linux: гайд по командам поиска

Что общего у потерянного файла, иглы в стоге сена и смысла жизни? Все они требуют упорного поиска. И в случае с файлами, Linux предлагает мощный инструмент – команды «поиска». Эти команды, подобно ищейкам, неутомимо прочесывают вашу файловую систему, вынюхивая файлы по заданным критериям.

Команды «поиска» – не обычные собаки. Они – гончие, жаждущие найти самый маленький след. Потеряли файл с незавершенной работой? Нет проблем! Введите несколько критериев, и эти команды вернут его, словно по мановению волшебной палочки.

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

Поиск файлов с нужным именем — нехитрая задачка. Введите название как есть, или используйте маски «*» и «?» для замены неизвестных частей имени.

Например, чтобы найти файл с именем «document.txt», введите:

find / -name document.txt

Или, если имя файла частично известно, примените маску:

find / -name «docs*»

Маска «*» заменит любые неизвестные символы в конце имени, а «?» — любой одиночный символ.

Поиск по типу файла

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

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

С помощью команды find можно выполнять поиск файлов по типу, используя параметр -type.

Параметр -type требует указания одного из следующих значений:

Тип Описание
f Обычный файл
d Каталог
l Символическая ссылка
s Сокет
p Каталог именованных каналов
c Символьное устройство
b Блочное устройство

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

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

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

Используйте флаг -size, за которым следует число и единица измерения, например, К (килобайты) или М (мегабайты).

Для поиска файлов больше 100 МБ:

find / -size +100M

Для поиска файлов меньше 10 КБ:

find / -size -10k

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

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

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

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

Используйте ключ ‘-mtime’ для поиска файлов по числу дней с момента изменения.

Синтаксис: find <путь> -mtime <число дней>

Например, ‘find /home -mtime 3’ найдет все файлы в каталоге ‘/home’, которые были изменены за последние 3 дня.

Для поиска файлов по интервалу времени используйте ключи ‘-newerct’ и ‘-olderct’.

Синтаксис: find <путь> -newerct <ссылочный файл> или find <путь> -olderct <ссылочный файл>

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

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

Найти файлы, права доступа к которым удовлетворяют определенным условиям, можно с помощью команды «find» и символов типа файла.

«-perm»: позволяет искать файлы с определенными правами.

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

Например, для поиска файлов, доступных для записи всем пользователям, используйте «-perm -002».

Типичные типы прав

  • -rwxrwxrwx: полный доступ (чтение, запись, выполнение)
  • -rw-rw-r—: доступ для чтения и записи владельцу и группе
  • -r—r—r—: доступ только для чтения
  • -rw-r—r—: доступ для записи и чтения владельцу и другим пользователям

Поиск файлов с вложениями

Поиск файлов с вложениями отличается от поиска обычных файлов.

Запрос к утилите find

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

find /путь/к/каталогу -type f -exec file --mime-type {} \; | grep -E 'application/.*'

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

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

find /путь/к/каталогу -type f -exec file --mime-type {} \; | grep -E 'application/.*' | sort

Этот запрос отсортирует найденные файлы по названию.

Использование find с таблицами

find /путь/к/каталогу -type f -exec file —mime-type {} \; |

grep -E ‘application/.*’ | sort |

column -t -s$’\t’

Результат запроса будет выглядеть следующим образом:

Файл Тип MIME
/путь/к/файлу1.pdf application/pdf
/путь/к/файлу2.doc application/msword
/путь/к/файлу3.xls application/vnd.ms-excel

Файловый поиск в целевом каталоге

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

-mindepth устанавливает минимальную глубину каталога.

-maxdepth задаёт максимальное количество уровней.

-inum позволяет отыскивать индексные номера инодов.

Комбинируя эти опции, можно с точностью выявлять файлы в нужном месте.

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

Хотите выудить из тысячи файлов нужные, опираясь на паттерны? Специальные операторы в команде find помогут вам в таком точечном отборе.

Для начала, определите общие черты искомых файлов — символы, буквы или целые слова.

Вооружившись такими масками-паттернами, вы сможете быстро находить нужные объекты.

Например, с помощью маски «*.txt» вы отберёте все файлы с расширением .txt.

Использование метасимволов

В таких масках можно использовать метасимволы:

  • ? — один любой символ;
  • * — любое количество символов;
  • [множество] — любой символ из указанного множества.

Пример: к примеру, маска «my*file» найдёт все файлы, начинающиеся с «my» и заканчивающиеся на «file» независимо от количества символов между ними.

Глубокий поиск

Чтобы включать в поиск не только текущую директорию, но и поддиректории, используйте оператор —path.

Например, маска «-path **/*my*file» отыщет все файлы, в пути которых есть подстрока «my» и они находятся на любом уровне вложенности.

Исключение каталогов из поиска

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

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

Чтобы использовать -prune, просто введите его после путей к директориям, которые нужно исключить. Например, следующая команда исключает каталог /var/log из поиска:

find / -print -prune -o -prune

Чтобы исключить несколько каталогов, просто перечислите их после -prune. К примеру, эта команда исключает /var/log, /tmp и /proc:

find / -print -prune -o -prune -o -prune

Рекурсивный поиск

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

Для этого и используется параметр -recurse или -r.

Его можно записать как опцию с параметром -prune.

То есть, он будет обрабатывать все подкаталоги, кроме тех, которые отфильтрованы с помощью -prune.

Если же опустить параметр -prune, то будут обрабатываться все подкаталоги.

Параллельный поиск

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

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

Для выполнения параллельного поиска можно воспользоваться утилитами parallel или GNU Parallel.

Синтаксис для параллельного поиска с использованием параллели: find /путь/к/каталогу -name «pattern» | parallel -j число_потоков команда

Вопрос-ответ:

Как найти все файлы с определенным именем?

Используйте флаг «-name». Например: `find /home -name «my_files.txt»`.

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

Используйте флаг «-exec». Например: `find /home -exec grep «keyword» \;`

Как найти файлы определенного размера?

Используйте флаг «-size». Например: `find /home -size +10M`. Для указания размера в байтах используйте «-size_c».

Как исключить каталоги из поиска?

Используйте флаг «-prune». Например: `find /home -prune -o -name «my_files.txt»`

Как использовать команды «find» в сложных запросах?

Сочетайте флаги с логическими операторами (-and, -or, -not). Например: `find /home -name «my_files.txt» -and -size +10M` (находит файлы с именем «my_files.txt» размером более 10 МБ).

Видео:

Linux поиск файлов

Оцените статью
Обучение