В прошлом посте мы рассмотрели команду 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. Пожалуйста, дайте мне знать, если возникнут какие-либо вопросы и предложения по поводу того, что вы хотите, чтобы мы изучили дальше.