Find как найти строку

Как использовать команду find для поиска в Windows

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

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

ПРИМЕЧАНИЕ. Команда find не подходит для больших файлов или большого количества файлов.

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

Откройте окно командной строки с правами администратора

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

Введите cmd.exe в поле поиска на панели задач. Затем щелкните правой кнопкой мыши на пункт «Командная строка» и выберите « Запуск от имени администратора» во всплывающем меню.

Как использовать команду find для поиска в Windows

Если появится диалоговое окно «Контроль учетных записей», нажмите «Да», чтобы продолжить.

ПРИМЕЧАНИЕ. Это диалоговое окно может не отображаться в зависимости от настроек контроля учетных записей. Мы не рекомендуем полностью отключать UAC.

Как использовать команду find для поиска в Windows

Ключи и параметры для команды find

Большинство команд имеют дополнительные ключи, которые изменяют стандартное действие команды. Вы можете получить справку, чтобы увидеть все доступные ключи для команды find, набрав в строке следующую строку и нажав Enter:

find /?

Как использовать команду find для поиска в Windows

Ключи могут быть строчными или прописными.

Для параметра «string» вы должны заключить строку в двойные кавычки, иначе команда find не будет работать и вернет ошибку.

Параметр имени диска [drive:] [path] может быть любым, от буквы диска до одного файла или нескольких файлов.

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

Синтаксис команды – это особый способ организации команды, ее ключей и параметров. Ниже приведен общий синтаксис команды find.

find [ключи] “строка” [путь]

Ключи могут быть в любом порядке, если они находятся перед параметром «string». Скобки [] указывают, что ключ или параметр является необязательным.

Поиск отдельного документа для текстовой строки

Сначала мы покажем вам, как искать в одном документе все вхождения текстовой строки. Следующая команда ищет в файле example1.txt фразу «groovypost – is the best tech site».

find “groovypost – is the best tech site” “C:UsersLoriDocumentsFindCommandExamplesexample1.txt”

ПРИМЕЧАНИЕ. Если в какой-либо части пути или имени файла есть пробелы, вы должны заключать в кавычки весь путь, как мы делали в приведенной выше команде. Кавычки на самом деле не нужны в этом случае, но они точно не помешают.

Как использовать команду find для поиска в Windows

Обратите внимание, что фраза не была найдена в приведенном выше примере (ничего не указано под путем к файлу), даже если она находится в файле. Это потому, что случай в «groovypost» не совпадает с тем, что было в файле, то есть «groovyPost». Добавьте ключ «/i » (ignore case) сразу после команды поиска (перед фразой), чтобы игнорировать регистр при поиске текстовой фразы.

find /i “groovypost – is the best tech site” “C:UsersLoriDocumentsFindCommandExamplesexample1.txt”

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

Как использовать команду find для поиска в Windows

Поиск нескольких документов по одной и той же текстовой строке

Теперь, когда вы можете искать один файл для текстовой строки, давайте искать несколько файлов для одной и той же строки.

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

find /i “groovypost” “C:UsersLoriDocumentsFindCommandExamplesexample1.txt” “C:UsersLoriDocumentsFindCommandExamplesexample2.txt”

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

find /i “groovypost” “C:UsersLoriDocumentsFindCommandExamples*.txt”

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

Как использовать команду find для поиска в Windows

Подсчитать количество строк в файле

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

Мы передали результаты команды type в команду find, используя вертикальную черту (|). Мы использовали ключ «/v» для отображения всех строк, НЕ содержащих строку «», поэтому каждая строка с текстом будет подсчитана. Чтобы отобразить только количество строк в текстовом файле (не сами строки), мы используем ключ «/c».

type C:UsersLoriDocumentsFindCommandExamplesexample1.txt | find “” /v /c

Как использовать команду find для поиска в Windows

Отправьте вывод другой команды в команду поиска

Вы также можете выполнить поиск определенной строки во всех именах файлов в каталоге, отправив выходные данные команды dir в команду find.

Например, мы получили список каталогов C:UsersLoriDocumentsFindCommandExamples и все подкаталоги в этом каталоге (ключ /s). Мы также указали использовать пустой формат без информации о заголовке (ключей «/b») и отобразили список в том же формате, что и формат широкого списка (ключ «/w»), но отсортированный по столбцу («/d»).

Затем мы направляем (|) вывод команды dir в команду find, добавляя только «example» в качестве параметра. Мы не добавляли никаких ключей в команду поиска. Имена файлов для поиска берутся из вывода команды dir.

dir “C:UsersLoriDocumentsFindCommandExamples” /s /b /d | find “example”

Как использовать команду find для поиска в Windows

А вы предпочитаете использовать команду поиска или поле поиска в проводнике? Как вы использовали команду поиска? Поделитесь своими идеями и примерами с нами в комментариях ниже.

Источник: IT Проповедник

Присоединяйтесь к нам, в нашем уютном Телеграмм-канале, где вас ждут новости мира IT, подборки книг и много-много интересного!

  • 01.02.2020
  • 10 517
  • 0
  • 04.08.2021
  • 8
  • 8
  • 0

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

  • Содержание статьи
    • Описание
    • Синтаксис
    • Параметры
      • Примечания
    • Примеры
    • Справочная информация
    • Добавить комментарий

FIND – Поиск заданной строки текста в файле или нескольких файлах.

Описание

После поиска в заданных файлах команда find выведет на экран все строки из этих файлов, содержащие заданный образец.

Синтаксис

find [/v] [/c] [/n] [/i] "строка" [[диск:][путь]ИмяФайла[...]]

Параметры

Параметр Описание
/v Выводит все строки, не содержащие строку, заданную параметром строка
/c Подсчет строк, содержащих строку, указанную параметром строка, и отображение общего количества
/n Выводит номера строк перед самими строками
/i Задает поиск без различия строчных и заглавных букв
“строка_поиска” Обязательный параметр. Указывает группу символов, поиск которой будет производиться. Необходимо заключить параметр строка в кавычки (“строка”)
[диск:][путь] ИмяФайла Задает местоположение и имя файла, в котором будет производиться поиск заданной строки символов
/? Отображение справки в командной строке

Примечания

  • Если ключ /i не указан, команда find ищет именно то, что указано в параметре строка. Например, для команды find символы “a” и “A” являются различными. Если используется ключ /i, команда find не различает строчные и прописные буквы, и символы “a” и “A” являются одинаковыми.
  • Если строка поиска содержит кавычки, при вызове команды каждая кавычка в строке поиска должна быть заменена двумя символами кавычек (“СтрокаСодержания””Кавычки”).
  • Если имя файла пропущено, find действует как фильтр, получая ввод из стандартного источника вывода (обычно клавиатура, канал или файл перенаправления), и выводит все строки, содержащие параметр строка.
  • Параметры и ключи команды find могут быть заданы в произвольном порядке.
  • Подстановочные знаки (* и ?) не могут быть использованы в именах файлов и расширениях, задаваемых в команде find. Чтобы искать строку в множестве файлов, указанных с помощью подстановочных знаков, можно использовать команду find в команде for.
  • Если в одной команде заданы ключи /c и /v, команда find выведет на экран количество строк, которые не содержат заданную строку поиска. Если в одной команде указаны оба ключа: /c и /n, команда find игнорирует ключ /n.
  • Команда find не распознает символ перевода строки. Когда команда find используется для поиска текста в файле, который содержит символы перевода строки, необходимо ограничить строку поиска текстом, который может быть найден между символами перевода строки (строка не может прерываться символом перевода строки). Например, find не найдет совпадение для строки “файл налогов” если перевод строки в файле стоит между словами “файл” и “налогов”.

Примеры

Для вывода всех строк из файла Pencil.ad, которые содержат слова “Точилка” служит следующая команда:

find "Точилка" pencil.ad

Для поиска строки, содержащей текст, указанный в кавычках, необходимо сначала заключить в кавычки всю строку. Во-вторых, необходимо использовать двойные кавычки для каждых кавычек, содержащихся в строке. Для поиска фразы “Точилка” (именно с ковычками в файле Pencil.ad:

find ""Точилка"" pencil.ad

Если поиск требуется провести в нескольких файлах, следует использовать команду find с командой for. Для поиска файлов с расширением .bat, содержащих строку “PROMPT”, можно использовать следующую команду:

for %f in (*.bat) do find "PROMPT" %f

Для поиска на жестком диске C файлов, содержащих строку “CPU” и отображения их имен используйте символ канала (|), чтобы направить результаты команды dir в команду find:

dir c: /s /b | find "CPU"

Так как команда find проводит поиск, различая строчные и заглавные буквы, а команда dir выводит результаты заглавными буквами, необходимо задать строку “CPU” заглавными буквами или использовать ключ /i в команде find.

Справочная информация

В этой статье мы с вами рассмотрим утилиту findstr и find командной строки, которые позволяет производить поиск строк в текстовом документе. Поиск через командную строку можно также настроить, используя шаблоны, которые настраиваются на основе регулярных выражений, но сперва, немного лирики…

В былые времена, когда я был еще полным чайником в компьютерах, мне пришлось услышать про волшебные “виртуальные диски”. В то время размер моего винчестера составлял 2 гигабайта, и на счету был каждый байт, я каждую картинки сжимал для экономии места, зато в системе был один фильм и одна игра “Age Of Empires 2”, я ее уже раз сто проходил. Так вот, я почему то решил, что “виртуальный диск”, это дополнительная память, которая может появится из воздуха… Где то два дня пытался всячески установить через Диспетчер устройств еще один винт на 500 метров, при том, что такого оборудования в системном блоке и подавно не было…

Утилита find командная строка

FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] “искомые_значения” [[диск:][путь]имя_файла[ …]]

И так, смотрим на описание ключей:

[/V] – произвести вывод всех строк, которые НЕ содержат заданной.

[/C] – выводится только общее число строк, содержащих заданную.

[/N] – Вывод номеров отображаемых строк.

[/I] – Поиск без учета регистра символов.

[/OFF[LINE]] – Не пропускать файлы с установленным атрибутом «Автономный».

“искомые_значения” – собственно, строчка, поиск которой производится из командной строки Windows

[[диск:][путь]имя_файла[ …]] – тут мы прописываем один или несколько имен документов, в которых нужно произвести поиск через командную строку, можно использовать подстановочные знаки.

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

Создадим на диске D: папку TEST, в который благополучно поместим три файла с расширениями  .pdf, .txt и .mf. Для начала попробуем найти слово «const» во всех документах с расширением txt:

FIND “const” D:TEST*.txt

На выходе мы получим следующую информацию:

———- D:TESTSEND_MAIL_DATA.VBS.TXT
соnst toMSg =»to@yandex.ru» ‘получатель
соnst fromMSg =»from@gmail.com» ‘отправитель
соnst subjMsg = «Администратор» ‘субъект
соnst sndUsr =» login» ‘логин
соnst sndPswd =»password» ‘пароль
cоnst smtpSrvr = «smtp.gmail.com» ‘почтовый сервер

———- D:TESTSEND_MAIL_TEXT.VBS.TXT
cоnst toMSg =»to@yandex.ru»
cоnst fromMSg =»from@gmail.com»
cоnst subjMsg = «Администратор»
cоnst sndUsr =» login»
сonst sndPswd =»password»
сonst smtpSrvr = «smtp.gmail.com»

———- D:TESTSUBDOMEN_SCAN.WSF.TXT

Как видим, мы получили список всех тех строчек, где встречается искомое слово.

Теперь попробуем сделать поиск через командную строку слова “samsung” во всех pdf файлах:

FIND “samsung” D:TEST*.pdf

Слово «samsung» встречается в одном документе, но, утилита FІND найти его не смогла, стоит обратить внимание, что и стандартный поиск операционной системы Windows также ничего не нашел, видимо, Google в этом все же больше преуспел.

Теперь попробуем усложнить задачу. Дело в том, что Windows ищет фразу не только в контексте файла, но и в его свойствах. Посмотрим, будет ли утилита find командной строки Windows производить поиск из описания. Я специально, по одному из каждого типа файлов (.pdf, .txt и .mf) вставлю в описание фразу «Victoria Sanremo». И так, приступим:

FIND “Victoria Sanremo” D:TEST*.*

В результат выполнения команды find, командная строка ничего не нашла в свойствах документов. Кроме утилиты FІND, есть еще и CMD FINDSTR, которая обладает немного большими возможностями.

Утилита FINDSTR командная строка

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

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:файл][/C:строчка] [/G:файл] [/D:список_папок] [/A:цвета] [/OFF[LINE]] “искомые_значения”[[диск:][путь]имя_файла[ …]]

/B – Данный ключ определяет поиск образца лишь в началах строчек.

/E — Данный ключ определяет поиск образца лишь в конце.

/R – Фразы и слова будут приниматься как регулярные выражения.

/S – Производит поиск файлов через командную строку в текущем каталоге и всех его подпапках.

/I – Данный ключ определяет, что поиск фразы из командной строки будет вестись без учета регистра.

/X – Производит вывод только тех строчек, которые содержат точное совпадение.

/V — Производит вывод только тех строчек, которые не содержат точного совпадения с искомой фразой.

/N — Производит вывод номера строчки (которые содержат точное совпадение) и ее содержимое.

/M — Производит вывод лишь имени документа, который содержит совпадение.

/O – Вывести список найденных строк через пустую строчку.

/P – Данный параметр определяет, что произойдет пропуск всех строк, которые содержат непечатаемые символы.

/OFF[LINE] — Не пропускает те документы, у которых установлен атрибут «Автономный».

/A:цвета – Шестнадцатеричный код цвета, для получения справки можете ввести команду «COLOR /?»

/F:файл – Производит чтение списка файлов из заданного документа.

/C:строчка – Использовать значение данного параметра как искомую фразу поиска.

/G:файл – Позволяет получить список строк из заданного документа.

/D:список_папок – Тут через точку с запятой мы можем задать список каталогов, в которых нужно произвести поиск через командную строку.

“искомые_значения” – Собственно, то, что мы ищем.

[диск:][путь]имя_файла — Задаем путь к документу (документам)

Что бы разделить между собой искомые фразы, между ними вставляется пробел, если параметр не содержит префикса /C. Например,

FINDSTR “Привет мир” data.txt

ищет «Привет» или «мир» в файле data.txt, а команда

FINDSTR /C:”Привет мир” data.txt

ищет фразу «Привет мир» в  файле data.txt.

Регулярные выражения являются своеобразным бонусом, которым не то, что оболочка, но и язык программирования не всегда может похвастаться. При поиске из командной строки, регулярные выражения позволяют задавать собственные шаблоны (для справки по некоторым значениям введите в cmd findstr/? ), они также используются в сценариях сервера Windows Script Host, за это отвечает отдельный объект.

Обновлено Обновлено: 01.02.2022
Опубликовано Опубликовано: 25.07.2016

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

Синтаксис
Примеры
    Поиск по имени
    По дате
    По типу файла
    По правам
    По содержимому
    С сортировкой по дате изменения
    Лимиты
    Действия над найденными объектами
Запуск по расписанию в CRON

Общий синтаксис

find <где искать> <опции>

<где искать> — путь к корневому каталогу, откуда начинать поиск. Например, find /home/user — искать в соответствующем каталоге. Для текущего каталога нужно использовать точку «.».

<опции> — набор правил, по которым выполнять поиск.

* по умолчанию, поиск рекурсивный. Для поиска в конкретном каталоге можно использовать опцию maxdepth.

Описание опций

Опция Описание
-name Поиск по имени.
-iname Регистронезависимый поиск по имени.
-type

Тип объекта поиска. Возможные варианты:

  • f — файл;
  • d — каталог;
  • l — ссылка;
  • p — pipe;
  • s — сокет.
-size Размер объекта. Задается в блоках по 512 байт или просто в байтах (с символом «c»).
-mtime Время изменения файла. Указывается в днях.
-mmin Время изменения в минутах.
-atime Время последнего обращения к объекту в днях.
-amin Время последнего обращения в минутах.
-ctime Последнее изменение владельца или прав на объект в днях.
-cmin Последнее изменение владельца или прав в минутах.
-user Поиск по владельцу.
-group По группе.
-perm С определенными правами доступа.
-depth Поиск должен начаться не с корня, а с самого глубоко вложенного каталога.
-maxdepth Максимальная глубина поиска по каталогам. -maxdepth 0 — поиск только в текущем каталоге. По умолчанию, поиск рекурсивный.
-prune Исключение перечисленных каталогов.
-mount Не переходить в другие файловые системы.
-regex По имени с регулярным выражением.
-regextype <тип> Тип регулярного выражения.
-L или -follow Показывает содержимое символьных ссылок (симлинк).
-empty Искать пустые каталоги.
-delete Удалить найденное.
-ls Вывод как ls -dgils
-print Показать найденное.
-print0 Путь к найденным объектам.
-exec <команда> {} ; Выполнить команду над найденным.
-ok Выдать запрос перед выполнением -exec.

Также доступны логические операторы:

Оператор Описание
-a Логическое И. Объединяем несколько критериев поиска.
-o Логическое ИЛИ. Позволяем команде find выполнить поиск на основе одного из критериев поиска.
-not или ! Логическое НЕ. Инвертирует критерий поиска.

Полный набор актуальных опций можно получить командой man find.

Примеры использования find

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

1. Простой поиск по имени:

find / -name “file.txt”

* в данном примере будет выполнен поиск файла с именем file.txt по всей файловой системе, начинающейся с корня /.

2. Поиск файла по части имени:

find / -name “*.tmp”

* данной командой будет выполнен поиск всех папок или файлов в корневой директории /, заканчивающихся на .tmp

3. Несколько условий. 

а) Логическое И. Например, файлы, которые начинаются на sess_ и заканчиваются на cd:

find . -name “sess_*” -a -name “*cd”

б) Логическое ИЛИ. Например, файлы, которые начинаются на sess_ или заканчиваются на cd:

find . -name “sess_*” -o -name “*cd”

в) Более компактный вид имеют регулярные выражения, например:

find . -regex ‘.*/(sess_.*cd)’

find . -regex ‘.*/(sess_.*|.*cd)’

* где в первом поиске применяется выражение, аналогичное примеру а), а во втором — б).

4. Найти все файлы, кроме .log:

find . ! -name “*.log”

* в данном примере мы воспользовались логическим оператором !.

Поиск по дате

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

find . -type f -mtime +60

* данная команда найдет файлы, которые менялись более 60 дней назад.

Или в промужутке:

find . -mmin -20 -mmin +10 -type f

* найти все файлы, которые менялись более 10 минут, но не более 20-и.

2. Поиск файлов с помощью newer. Данная опция доступна с версии 4.3.3 (посмотреть можно командой find –version).

а) дате изменения:

find . -type f -newermt “2019-11-02 00:00”

* покажет все файлы, которые менялись, начиная с 02.11.2019 00:00.

find . -type f -newermt 2019-10-31 ! -newermt 2019-11-02

* найдет все файлы, которые менялись в промежутке между 31.10.2019 и 01.11.2019 (включительно).

б) дате обращения:

find . -type f -newerat 2019-10-08

* все файлы, к которым обращались с 08.10.2019.

find . -type f -newerat 2019-10-01 ! -newerat 2019-11-01

* все файлы, к которым обращались в октябре.

в) дате создания:

find . -type f -newerct 2019-09-07

* все файлы, созданные с 07 сентября 2019 года.

find . -type f -newerct 2019-09-07 ! -newerct “2019-09-09 07:50:00”

файлы, созданные с 07.09.2019 00:00:00 по 09.09.2019 07:50

По типу

Искать в текущей директории и всех ее подпапках только файлы:

find . -type f

* f — искать только файлы.

Поиск по правам доступа

1. Ищем все справами на чтение и запись:

find / -perm 0666

2. Находим файлы, доступ к которым имеет только владелец:

find / -perm 0600

Поиск файла по содержимому

find / -type f -exec grep -i -H “content” {} ;

* в данном примере выполнен рекурсивный поиск всех файлов в директории / и выведен список тех, в которых содержится строка content.

С сортировкой по дате модификации

find /data -type f -printf ‘%TY-%Tm-%Td %TT %pn’ | sort -r

* команда найдет все файлы в каталоге /data, добавит к имени дату модификации и отсортирует данные по имени. В итоге получаем, что файлы будут идти в порядке их изменения.

Лимит на количество выводимых результатов

Самый распространенный пример — вывести один файл, который последний раз был модифицирован. Берем пример с сортировкой и добавляем следующее:

find /data -type f -printf ‘%TY-%Tm-%Td %TT %pn’ | sort -r | head -n 1

Поиск с действием (exec)

1. Найти только файлы, которые начинаются на sess_ и удалить их:

find . -name “sess_*” -type f -print -exec rm {} ;

-print использовать не обязательно, но он покажет все, что будет удаляться, поэтому данную опцию удобно использовать, когда команда выполняется вручную.

2. Переименовать найденные файлы:

find . -name “sess_*” -type f -exec mv {} new_name ;

или:

find . -name “sess_*” -type f | xargs -I ‘{}’ mv {} new_name

3. Переместить найденные файлы:

find . -name “sess_*” -type f -exec mv {} /new/path/ ;

* в данном примере мы переместим все найденные файлы в каталог /new/path/.

4. Вывести на экран количество найденных файлов и папок, которые заканчиваются на .tmp:

find . -name “*.tmp” | wc -l

5. Изменить права:

find /home/user/* -type d -exec chmod 2700 {} ;

* в данном примере мы ищем все каталоги (type d) в директории /home/user и ставим для них права 2700.

6. Передать найденные файлы конвееру (pipe):

find /etc -name ‘*.conf’ -follow -type f -exec cat {} ; | grep ‘test’

* в данном примере мы использовали find для поиска строки test в файлах, которые находятся в каталоге /etc, и название которых заканчивается на .conf. Для этого мы передали список найденных файлов команде grep, которая уже и выполнила поиск по содержимому данных файлов.

7. Произвести замену в файлах с помощью команды sed:

find /opt/project -type f -exec sed -i -e “s/test/production/g” {} ;

* находим все файлы в каталоге /opt/project и меняем их содержимое с test на production.

Чистка по расписанию

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

Открываем на редактирование задания cron:

crontab -e

И добавляем:

0 0 * * * /bin/find /tmp -mtime +14 -exec rm {} ;

* в данном примере мы удаляем все файлы и папки из каталога /tmp, которые старше 14 дней. Задание запускается каждый день в 00:00.
* полный путь к исполняемому файлу find смотрим командой which find — в разных UNIX системах он может располагаться в разных местах.

Время на прочтение
5 мин

Количество просмотров 122K

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

Команда find – это невероятно мощный инструмент, позволяющий искать файлы не только по названию, но и по:

  • Дате добавления.
  • Содержимому.
  • Регулярным выражениям.

Данная команда будет очень полезна системным администраторам для:

  • Управления дисковым пространством.
  • Бэкапа.
  • Различных операций с файлами.

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

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

$ find directory-to-search criteria action

Где:

  • directory-to-search (каталог поиска) – это отправной каталог, с которой find начинает поиск файлов по всем подкаталогам, которые находятся внутри. Если не указать путь, тогда поиск начнется в текущем каталоге;
  • criteria (критерий) – критерий, по которым нужно искать файлы;
  • action (действие) – что делать с каждым найденным файлом, соответствующим критериям.

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

Следующая команда ищет файл s.txt в текущем каталоге:

$ find . -name "s.txt"
./s.txt

Где:

  • . (точка) – файл относится к нынешнему каталогу
  • -name – критерии по которым осуществляется поиск. В данном случае поиск по названию файла.

В данном случае критерий -name учитывает только символы нижнего регистра и файл S.txt не появиться в результатах поиска. Чтобы убрать чувствительность к регистру необходимо использовать –iname.

$ find . -iname "s.txt"
./s.txt
./S.txt

Для поиска всех изображений c расширением .png нужно использовать шаблон подстановки *.png:

$ find . -name "*.png"
./babutafb.png
./babutafacebook.png
./Moodle2.png
./moodle.png
./moodle/moodle1.png
./genxfacebook.png

Можно использовать название каталога для поиска. Например, чтобы с помощью команды find найти все png изображения в каталоге home:

$ find /home -name "*.png"
find: `/home/babuta/.ssh': Permission denied
/home/vagrant/Moodle2.png
/home/vagrant/moodle.png
/home/tisha/hello.png
find: `/home/tisha/testfiles': Permission denied
find: `/home/tisha/data': Permission denied
/home/tisha/water.png
find: `/home/tisha/.cache': Permission denied

Если выдает слишком много ошибок в отказе разрешения, тогда можно добавить в конец команды – 2> /dev/null. Таким образом сообщения об ошибках будут перенаправляться по пути dev/null, что обеспечит более чистую выдачу.

find /home -name "*.jpg" 2>/dev/null
/home/vagrant/Moodle2.jpg
/home/vagrant/moodle.jpg
/home/tisha/hello.jpg
/home/tisha/water.jpg

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

Критерий -type позволяет искать файлы по типу, которые бывают следующих видов:

  • f – простые файлы;
  • d – каталоги;
  • l – символические ссылки;
  • b – блочные устройства (dev);
  • c – символьные устройства (dev);
  • p – именованные каналы;
  • s – сокеты;

Например, указав критерий -type d будут перечислены только каталоги:

$ find . -type d
.
./.ssh
./.cache
./moodle

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

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

  • “+” — Поиск файлов больше заданного размера
  • “-” — Поиск файлов меньше заданного размера
  • Отсутствие знака означает, что размер файлов в поиске должен полностью совпадать.

В данном случае поиск выведет все файлы более 1 Гб (+1G).

$ find . -size +1G
./Microsoft_Office_16.29.19090802_Installer.pkg
./android-studio-ide-183.5692245-mac.dmg

Единицы измерения файлов:

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

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

Критерий -empty позволяет найти пустые файлы и каталоги.

$ find . -empty
./.cloud-locale-test.skip
./datafiles
./b.txt
...
./.cache/motd.legal-displayed

Поиск времени изменения

Критерий -cmin позволяет искать файлы и каталоги по времени изменения. Для поиска всех файлов, измененных за последний час (менее 60 мин), нужно использовать -60:

$ find . -cmin -60
.
./a.txt
./datafiles

Таким образом можно найти все файлы в текущем каталоге, которые были созданы или изменены в течение часа (менее 60 минут).

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

$ find . -cmin +60

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

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

$ find . -atime +180

Таким образом можно найти файлы, к которым не обращались последние полгода (180 дней).

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

Опция –user username дает возможность поиска всех файлов и каталогов, принадлежащих конкретному пользователю:

$ find /home -user tisha 2>/dev/null

Таким образом можно найти все файлы пользователя tisha в каталоге home, а 2>/dev/null сделает выдачу чистой без ошибок в отказе доступа.

Поиск по набору разрешений

Критерий -perm – ищет файлы по определенному набору разрешений.

$ find /home -perm 777

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

Операторы

Для объединения нескольких критериев в одну команду поиска можно применять операторы:

  • -and
  • -or
  • -not

Например, чтобы найти файлы размером более 1 Гбайта пользователя tisha необходимо ввести следующую команду:

$ find /home  -user tisha  -and  -size +1G  2>/dev/null

Если файлы могут принадлежать не только пользователю tisha, но и пользователю pokeristo, а также быть размером более 1 Гбайта.

$ find /home ( -user pokeristo -or -user tisha )  -and  -size +1G  2>/dev/null

Перед скобками нужно поставить обратный слеш “”.

Действия

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

  • -delete — Удаляет соответствующие результатам поиска файлы
  • -ls — Вывод более подробных результатов поиска с:
    • Размерами файлов.
    • Количеством inode.
  • -print Стоит по умолчанию, если не указать другое действие. Показывает полный путь к найденным файлам.
  • -exec Выполняет указанную команду в каждой строке результатов поиска.

-delete

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

$ find . -empty -delete

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

-exec:

Данное действие является особенным и позволяет выполнить команду по вашему усмотрению в результатах поиска.

-exec command {} ;

Где:

  • command – это команда, которую вы желаете выполнить для результатов поиска. Например:
    • rm
    • mv
    • cp
  • {} – является результатами поиска.
  • ; — Команда заканчивается точкой с запятой после обратного слеша.

С помощью –exec можно написать альтернативу команде –delete и применить ее к результатам поиска:

$ find . -empty -exec rm {} ;

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

$ find . -name "*.jpg" -exec cp {} /backups/fotos ;

Таким образом можно скопировать все .jpg изображения в каталог backups/fotos

Заключение

Команду find можно использовать для поиска:

  • Файлов по имени.
  • Дате последнего доступа.
  • Дате последнего изменения.
  • Имени пользователя (владельца файла).
  • Имени группы.
  • Размеру.
  • Разрешению.
  • Другим критериям.

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

  • Удаление.
  • Копирование.
  • Перемещение в другой каталог.

Команда find может сильно облегчить жизнь системному администратору, а лучший способ овладеть ей – больше практиковаться.

image

Добавить комментарий