В прошлом посте мы рассмотрели команду locate, хотя она работает быстро, но имеет несколько недостатков.

Сегодня мы собираемся изучить еще одну утилиту командной строки find для поиска файлов и каталогов в системе Linux.

find команда

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

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

Чтобы найти что-нибудь, мы просто используем команду find вместе с простым_паттерном, который мы хотим найти

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

В приведенном выше примере мы использовали команду find ~/Documents, где

find представляет команду найти.
~/Documents представляет собой простой шаблон, который указывает путь до каталога документов.

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

В приведенном выше примере мы использовали команду find -type f
find представляет команду find
-type представляет параметр 'type', который определяет тип контента
f определяет контент введите 'файл'

В ответ мы получили все файлы, которые есть в текущем рабочем каталоге.

Хорошо, а как насчет получения ответов только о каталогах

В приведенном выше примере мы использовали команду find -type d, где
find представляет команду find
-type представляет параметр 'type', который указывает тип содержимого
d указывает тип контента 'каталог'

В ответ мы получили только каталоги ., то есть текущий рабочий каталог и logs каталог.

Это все замечательно, но как насчет поиска файла по имени файла?

  • найти файл log1.txt

В приведенном выше примере мы используем команду find -name log1.txt, где
find представляет команду find
-name представляет параметр поиска по имени
log1.txt представляет имя файла, который нужно найти.

Давайте сделаем еще один шаг вперед и получим файлы без учета регистра

  • находить файлы по имени и игнорировать регистр

В приведенном выше примере мы использовали команду find -iname textFile1.txt, где
find представляет команду find
-iname представляет параметр поиска по имени и игнорирования регистра < br /> textFile1.txt представляет имя файла, который нужно найти

Это все основные сценарии, охватываемые командой find.

А теперь давайте посмотрим на несколько интересных сценариев из реального мира.

  • Найдите все файлы, размер которых больше или равен 5 МБ

В приведенном выше примере мы использовали команду find -type f -size +5M, где
find представляет команду find
-type f представляет тип содержимого, которым является файл (f). в нашем случае
-size представляет параметр для поиска файлов необходимого размера.
+5M представляет файлы, размер которых больше или равен 5 МБ.

  • найти все файлы размером больше 2 МБ, но меньше 10 МБ

В приведенном выше примере мы используем команду find -type f -size +2M -size -10M, где
find представляет команду find
-type f представляет тип содержимого, которым является файл (f). в нашем случае
-size представляет параметр для поиска файлов необходимого размера
+2M представляет файлы, размер которых больше или равен 2 МБ
-10M представляет файлы, размер которых менее 10 млн

Что, если нам нужны только файлы zip

  • Найдите все zip-файлы

В приведенном выше примере мы использовали команду find -type f -name *.zip, где
find представляет команду find
-type f представляет тип содержимого, которым является файл (f). в нашем случае
-name представляет вариант поиска файлов с определенным именем.
*.zip представляет все zip-файлы

Что, если бы мы хотели найти файлы размером более 2 МБ, но менее 5 МБ или файлы размером более 10 МБ

  • Найдите файлы с несколькими условиями

В приведенном выше примере мы использовали команду find -type f -size +2M -size -5M -o -size +10M, где
find представляет команду find
-type f представляет тип содержимого, которым является файл (f). в нашем случае
-size представляет параметр для поиска файлов требуемого размера
+2M представляет файлы, размер которых превышает или равен 2 МБ
-5M представляет файлы размером менее 5 МБ
-o представляет собой логическое ИЛИ
+10M представляет файлы размером не менее 10 МБ

Точно так же мы можем использовать другие логические операторы И (-а), НЕ (!) и т. Д.

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

  • найти все файлы размером более 2 МБ и менее 5 МБ и скопировать их в каталог «files_filtered»

В приведенном выше примере мы использовали команду sudo find -type f -size +2M -size -5M -exec cp {} ~/files_filtered \;, где
find представляет команду find
-type f представляет тип содержимого, которым является файл (f). в нашем случае
-size представляет параметр для поиска файлов необходимого размера
+2M представляет файлы, размер которых больше или равен 2 Мбайт
-5M представляет файлы меньше 5 Мбайт
-exec означает выполнить команду
cp {} представляет команду для выполнения на выходе, т.е. копия в нашем случае
~/files_filtered представляет путь к выходному каталогу
\; означает, что команда завершена

Но есть проблема с приведенной выше командой, exec не спрашивает нас перед выполнением операции, которая будет работать в случае копирования, но в случае перемещения или удаления это может создать множество проблем.

Более безопасная альтернатива -exec для операций перемещения и удаления - -ok

  • найти все файлы размером более 2 МБ и менее 5 МБ и переместить их в каталог «files_filtered»

В приведенном выше примере мы использовали команду sudo find -type f -size +2M -size -5M -ok mv {} ~/files_filtered \;, где

find представляет команду find
-type f представляет тип содержимого, которым является файл (f), в нашем случае
-size представляет параметр для найти файлы необходимого размера
+2M представляет файлы размером не менее 2 МБ
-5M представляет файлы размером менее 5 МБ
-ok означает выполнить команду с проверкой < br /> mv {} представляет команду для выполнения на выходе, то есть перемещение в нашем случае
~/files_filtered представляет путь к выходному каталогу
\; означает, что команда завершилась

Хорошо, это все, что нам нужно знать о команде find.

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