Найти тему

Поиск файлов и папок через терминал в Linux-дистрибутивах

Периодически перед каждым пользователем возникает задача поиска файла или папки. Если у вас дистрибутив с графической оболочкой, то найти что-либо не составит труда - открываете файловый менеджер и в поле поиска вводите нужный запрос. Как быть тем, кто взаимодействует с серверами и имеет перед собой только терминал? Об этом сегодня и пойдет речь.

Синтаксис команды для поиска

Осуществляется поиск командой find (поиск). Функционал у нее настолько огромен, что не получится рассказать про все в одной заметке. Поэтому напишу о том, с чем сам сталкивался по мере решения поставленных задач. Общий синтаксис (т. е. правила написания) команды выглядит следующим образом

find <место_поиска> <критерий_поиска> <действие_с_найденными_элементами>

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

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

Они задаются при помощи ключей и их значений . Ниже перечислю те ключи, которые использовал на практике. Критерии поиска можно объединяться в одну команду. Для этого используются операторы -and (и), -or (или), -not (не).

Поиск по типу объекта (файл или папка)

Чтобы найти файл используйте ключ -type и значение f, для поиска директории ключ тот же самый, значение меняется на d. Поиск по файлам работает по-умолчанию и отдельно ключ -type f можно не указывать.

-2

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

Использование ключа -name позволит задать конкретное имя искомого объекта. Если вы не уверены в имени, но знаете его часть или расширение, то можно использовать звездочку (*). К примеру, чтобы найти все файлы с расширением conf в текущей директории введите

find . -name “*.conf”
-3

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

Для поиска файлов и папок по размеру используйте ключ -size и в качестве значения передайте размер и единицы измерения. Например

find . -size +10M

Команда выведет все файлы более 10 мегабайт. Чтобы найти все файлы меньше этого размера используется знак -. Наименование единиц измерения следующее:

  • c — Байт
  • k — Кбайт
  • M — Мбайт
  • G — Гбайт
-4

Поиск по дате или времени

Для поиска по конкретному временному отрезку используются ключи -mtime (modify time) и -atime (access time). Первый ключ позволяет осуществить поиск по времени последнего изменения файла Например, чтобы найти файлы, которые в последний раз менялись более 1 дня назад, нужно ввести

find . -mtime -1

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

-5

Использование ключа -atime позволяет искать файлы по времени последнего доступа к ним. Например следующая команда найдет файлы к которым не обращались (т. е. не меняли права доступа и не открывали где-либо) последние 6 месяцев.

find . -atime +180
-6

Кстати, мне не удалось найти способ поиска файлов, которые были созданы в определенное время (т. н. creation time). В файловых системах на базе ядра Linux с этим возникает какая-то проблема.

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

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

find . -type d -user jc

Команда выше найдет все папки, которые принадлежат пользователю с именем jc.

-7

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

Ключ -empty позволяет найти пустые папки (т. е. в них ничего нет) и файлы (т. е. внутри файла нет содержимого). Чаще всего ключ используется для поиска пустых директорий. Следующая команда найдет в текущей папке все пустые файлы/каталоги.

find . -empty
-8

Действия с результатами поиска

С найденными файлами или папками можно поступить следующим образом:

  • вывести результаты поиска (ключ -print)
  • вывести результаты поиска с подробностями (ключ -ls)
  • удалить (ключ -delete)
  • сделать что-то с каждым результатом в поиске (ключ -exec)

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

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

-exec <команда> {} \;

Примерами команд являются: rm (remove), cp (copy), mv (move). Все эти команды знакомы читателям и подписчикам по трилогии материалов по работе с файлами и папками в Linux. Подробнее можете прочитать по ссылкам внизу.

Команды для управления каталогами в Linux

Команды для управления файлами в Linux

Команды для копирования и перемещения каталогов и файлов в Linux

Две фигурные скобки ({}) являются как-раз таки результатами поиска. Говоря проще, эти скобки говорят, что команду перед ними нужно произвести с каждым найденным файлом или папкой. Последняя часть команды (\;) не несет сути, просто является обязательной. Например, следующая команда переместит все найденные текстовые файлы в другую папку.

find . -name “.*.txt” -exec mv {} $HOME/test2 \;
-9

Подводим итоги

Команда find используется в Linux-дистрибутивах для поиска файлов и папок по:

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

С найденными файлами вы можете поступать так, как пожелаете:

  • просмотреть
  • скопировать
  • переместить
  • удалить

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