Команда find: широкие возможности для поиска файлов в Linux.

Основные параметры команды find

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

  • -P никогда не открывать символические ссылки
  • -L — получает информацию о файлах по символическим ссылкам. Важно для дальнейшей обработки, чтобы обрабатывалась не ссылка, а сам файл.
  • -maxdepth — максимальная глубина поиска по подкаталогам, для поиска только в текущем каталоге установите 1.
  • -depth — искать сначала в текущем каталоге, а потом в подкаталогах
  • -mount искать файлы только в этой файловой системе.
  • -version — показать версию утилиты find
  • -print — выводить полные имена файлов
  • -type f — искать только файлы
  • -type d — поиск папки в Linux

Основная информация о find

Find — это одна из наиболее важных и часто используемых утилит системы Linux. Это команда для поиска файлов и каталогов на основе специальных условий. Ее можно использовать в различных обстоятельствах, например, для поиска файлов по разрешениям, владельцам, группам, типу, размеру и другим подобным критериям.

Утилита предустановлена по умолчанию во всех Linux дистрибутивах, поэтому вам не нужно будет устанавливать никаких дополнительных пакетов. Это очень важная находка для тех, кто хочет использовать командную строку наиболее эффективно.

Команда find имеет такой синтаксис:

find [папка] [параметры]критерийшаблон [действие]

Папка— каталог в котором будем искать

Параметры— дополнительные параметры, например, глубина поиска, и т д

Критерий— по какому критерию будем искать: имя, дата создания, права, владелец и т д.

Шаблон — непосредственно значение по которому будем отбирать файлы.

Выведите списки всех файлов текущей директории и ее подкаталогов

Для того чтобы вывести списки всех файлов текущей директории и ее подкаталогов, мы можем использовать:

$ find

В качестве альтернативы, мы можем также использовать ‘find . ’, которая выдаст вам тот же результат.

Найдите все файлы и директории в вашей текущей рабочей директории

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

$ find . -type d

Чтобы найти только файлы, а не директории:

$ find . -type f

1.1. Опция -name

При работе с командой find чаще всего используется опция -name. После нее в кавычках должен быть указан шаблон имени файла.Если необходимо найти все файлы с расширением .txt в вашем начальном каталоге, укажите символ в качестве путевого имени. Имя начального каталога будет извлечено из переменной $HOME.

$ find ~ -name «*.txt» -print

Чтобы найти все файлы с расширением .txt, находящиеся в текущем каталоге, следует воспользоваться такой командой:

$ find . -name «*.txt» -print

Для нахождения в текущем каталоге всех файлов, в именах которых встречается хотя бы один символ в верхнем регистре, введите следующую команду:

$ find . -name «[A-Z]*» -print

Найти в каталоге /etc файлы, имена которых начинаются с символов «host«, позволяет команда

$ find /etc -name «hoat*» -print

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

$ find ~ -name «*.txt» -print -о -name «.*» -print

Опция -о является обозначением операции логического ИЛИ. В случае ее применения помимо файлов с обычными именами будут найдены файлы, имена которых начинаются с точки.

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

$ find / -name «*» -print

Ниже показано, как найти все файлы, в именах которых сначала следуют символы нижнего регистра, а за ними — две цифры и расширение .txt (например, ах37.xt):

$ find . -name » [а-х] [а-х] [0—9] [0—9] . txt» -print

1.10. Опция Опция -depth

Опция -depth позволяет организовать поиск таким образом, что сначала проверяются все файлы текущего каталога (и рекурсивно все его подкаталоги) и только в конце — запись самого каталога. Эта опция широко применяется при создании списка файлов, помещаемых в архив на магнитной ленте с помощью команды cpio или tar, так как в этом случае сначала записывается на ленту образ каталога и лишь после этого задаются права доступа к нему.

$ find . -name «*» -print -о -name «.*» -print -depth

Вот как могут выглядеть результаты ее работы:

./.Xdefaults ./.bash_logout ./.bash_profile ./.bashrc ./.bash_nistory ./file ./Dir/filel ./Dir/file2 ./Dir/file3 ./Dir/Subdir/file4 ./Dir/Subdir ./Dir

1.11. Опция -mount

Поиск файлов только в текущей файловой системе, исключая другие смонтированные файловые системы, обеспечивает опция -mount команды find. В следующем примере осуществляется поиск всех файлов с расширением .хс в текущем разделе диска:

$ find / -name «*.ХС» -mount -print

1.2. Опция -perm

Опция -perm позволяет находить файлы с заданным режимом доступа. Например, для поиска файлов с режимом доступа 755 (их может просматривать и выполнять любой пользователь, но только владелец имеет право осуществлять запись) следует воспользоваться такой командой:

$ find . -perm 755 -print

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

$ find . -perm -007 -print

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

1.3. Опция -prune

Когда вы не хотите вести поиск в том или ином каталоге, воспользуйтесь опцией -prune. Она служит указанием остановить поиск на текущем путевом имени. Если путевое имя указывает на каталог, команда find не будет заходить в него. При наличии опции -depth опция -prune игнорируется.

Следующая команда проводит поиск в текущем каталоге, не заходя в подкаталог /bin:

$ find . -name «bin» -prune -о -print

1.6. Опция -mtime

Опцию -mtime следует применять при поиске файлов, доступ к которым осуществлялся х дней назад. Если аргумент опции снабдить знаком ‘-‘, будут отобраны файлы, к которым не было доступа в течение х дней. Аргумент со знаком ‘ ’ приводит к противоположному результату — производится отбор файлов, доступ к которым осуществлялся на протяжении последних х дней.

:/>  Как убрать кракозябры вместо букв в ОС Windows XP | Татьяна Поспелова

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

$ find / -mtime -5 -print

Ниже приведена команда, выполняющая поиск в каталоге /var/adm файлов, которые обновлялись в течение последних трех дней:

$ find /var/adm -mtime 3 -print

1.7. Опция -newer

Если необходимо найти файлы, доступ к которым осуществлялся в промежутке времени между обновлениями двух заданных файлов, воспользуйтесь опцией -newer. Общий формат ее применения таков:

-newer старый_файл ! -newer новый_файл

Знак ‘!‘ является оператором логического отрицания. Он означает: найти файлы, которые новее, чем старый_файл, но старее, чем новый_файл.

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

-rwxr-xr-x 1 root    root    92 Apr 18 11:18 age.awk-rwxrwxr-x 1 root    root    1054 Apr 20 19:37 belts.awk

Для нахождения всех файлов, которые обновлялись позже, чем age.awk, но раньше, чем belts.awk, выполните следующую команду (применение опции -exec описано чуть ниже):

$ find . -newer age.awk ! -newer belts.awk -exec Is -1 {} ;-rwxrwxr-x 1 root    root    62 Apr 18 11:32 ./who.awk-rwxrwxr-x 1 root    root    49 Apr 18 12:05 ./group.awk-rw-r—r— 1 root    root    201 Apr 20 19:30 ./grade2.txt-rwxrwxr-x 1 root    root    1054 Apr 20 19:37 ./belts.awk

Но как быть, если необходимо найти файлы, созданные, скажем, в течение последних двух часов, а у вас нет файла, сформированного ровно два часа назад, с которым можно было бы сравнивать? Создайте такой файл! Для этой цели предназначена команда touch -t, которая создает файл с заданной временной меткой в формате ММДЦччмм (месяц-день-часы-минуты). Например:

1.8. Опция -type

Операционные системы UNIX и Linux поддерживают различные типы файлов. Поиск файлов нужного типа осуществляется посредством команды, find с опцией -type. Например, для нахождения всех подкаталогов в каталоге /etc воспользуйтесь такой командой:

$ find /etc -type d -print

Чтобы получить список всех файлов, но не каталогов, выполните следующую команду:

$ find . ! -type d -print

Ниже приведена команда, которая предназначена для поиска всех символических ссылок в каталоге /etc.

$ find /etc -type 1 -print

1.9. Опция -size

В процессе поиска размер файла указывается с помощью опции -size N, где N — размер файла в блоках по 512 байтов. Возможные аргументы имеют следующие значения: N — поиск файлов, размер которых больше заданного, -N — меньше заданного, N — равен заданному.

$ find . -aize -flOOOk -print

Следующая команда выполняет поиск в каталоге /home/apache файлов, размер которых в точности равен 100 байтам:

$ find /home/apache -sixe 100с -print

Произвести поиск файлов, размер которых превышает 10 блоков (5120 байтов), позволяет приведенная ниже команда:

$ find . -size 10 -print

Выведите список всех файлов определенной директории

Для того чтобы найти файлы из определенной директории надо ввести:

$ find /root

This command will look for all the files in /root directory.

Найдите файл по имени в директории

Для поиска файла по имени в определенной директории введите:

$ find /root -name «linuxtechi.txt»

Эта команда будет искать файл linuxtechi.txt в директории /root. Так же мы найти все файлы с расширением .txt:

$ find /root -name «*.txt»

Найдите файл во множестве директорий

Для поиска файлов во множестве директорий введите:

$ find /root /etc -name «linuxtechi.txt»

With this command, we can look for linuxtechi.txt file in /root & /etc directories.

С помощью этой команды мы можем найти файл linuxtechi.txt в директориях /root и /etc.

Найдите файл по имени без учета регистра

Ищите файлы без учета регистра с помощью -iname:

$ find /root -iname «Linuxtechi.txt»

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

Найдите все типы файлов отличные от упомянутого

Давайте предположим, что нам необходимо найти все файлы отличные от определенного типа файлов. Чтобы этого добиться вводим:

$ find /root -not -name «*.txt»

Найдите файлы по множеству признаков

Мы можем совмещать более чем одно условие при поиске файлов. Предположим, что нам нужны файлы с расширениями .txt и .html:

$ find . -regex «.*.(txt|html)$»

Найдите файлы с использованием условия OR

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

$ find -name «*.txt» -o -name «linuxtechi*»

Действия над файлами

Когда выполняется команда find, вы можете выполнять различные действия над найденными файлами. Рассмотрим основные из них.

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

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

У команды find может быть несколько критериев поиска (их также называют tests). Каждый критерий представляет собой определенное условие проверки, которое возвращает либо true либо false. Это можно сравнить с условиями оператора if в программировании.

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

Операторы

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

Короткая форма оператораДлинная формаОписание

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

Опции

Опции команды find указываются, начиная с символа «-», за которым следует название опции. Рассмотрим основные опции.

Поиск текста в файлах через командную строку windows | вебисторий

Поиск в текстеНедавно мы рассматривали поиск файлов через командную строку Windows. Сегодня поговорим о том, как найти внутри файлов нужный нам текст. Сделать это можно при помощи команды FIND.

:/>  Download My WCP Watermark Editor 1.1.0

Команда find сообщает имена файлов, в которых был найден искомый файл, и выводит строки, в которых он содержится.

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

FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] «искомый_текст» [путь_к_файлу]

V — вывод всех строк, НЕ содержащих искомый текст;

C — вывод только общего числа строк, содержащих искомый текст;

N — вывод номеров строк;

I — поиск без учёта регистра символов;

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

Для примера проверим все текстовые файлы в каталоге C:test на наличие слова «текст».

find c:test*.txt "текст"

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

Поиск текста в файлах через командную строку Windows

Дело в том, что по умолчанию текст в командной строке Windows отображается согласно кодовой странице CP866, а в файлах он в кодовой странице CP1251. Поэтому нам достаточно сменить кодовую страницу в текущем окне командной строки. О том, как это сделать, можно прочитать в статье по этой ссылке.

Теперь мы видим, что слово «текст» встречается во всех трёх файлах.

Поиск текста в файлах через командную строку Windows

Теперь посмотрим на строки, в которых нет слова «текст»:

find /v c:test*.txt "текст"

Такие оказались только в файле FILE_1.TXT.

Поиск текста в файлах через командную строку Windows

Помните, что команда find по умолчанию учитывает регистр. Поэтому, написав в ней «Текст», мы не найдём подобного слова в файлах. Но регистр можно и проигнорировать:

find /i c:test*.txt "Текст"

На скриншоте ниже хорошо видно, что сперва команда не нашла слова «Текст» в файлах, так как в них оно записано без заглавных букв. Добавив /i, мы это исправили.

Поиск текста в файлах через командную строку Windows

Допустим, нам нужно знать порядковые номера строк, в которых отсутствует слово «текст»:

find /v /n c:test*.txt "текст"

Поиск текста в файлах через командную строку Windows

Если мы захотим знать число строк, в которых присутствует искомое слово, тогда выполним команду:

find /c c:test*.txt "текст"

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

find /v /c c:test*.txt "текст"

Поиск текста в файлах через командную строку Windows

Хотя до этого в примерах мы искали отдельное слово, find спокойно ищет и выражения:

Поиск текста в файлах через командную строку Windows

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

find "строка" < "c:test testfile_1.txt"

Как видите, наличие пробела в имени каталога C:test test не помешало осуществить поиск. Но это что касается поиска в файле file_1.txt. А вот попытка поискать сразу во всех файлах привела к ошибке.

Поиск текста в файлах через командную строку Windows

В таком случае можно воспользоваться циклическое обработкой, к примеру, командой for:

for %a in ("c:test test") do find %a*.txt "текст"

Поиск текста в файлах через командную строку Windows

Помните, что в этом случае в командной строке нужно использовать конструкции вида %a, а в файлах .bat и .cmd вида %%a.

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

Для следующего примера вернём кодовую страницу CP866. После этого отсортируем вывод команды ipconfig /all — оставим только те строки, где содержится слово «Состояние»:

ipconfig /all | find "Состояние"

Поиск текста в файлах через командную строку Windows

Здесь мы лишь пробежались по вершинам, но возможности команды find гораздо больше. Особенно, если использовать её в комплексе с другими командами.

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

Для начала рассмотрим простой пример использования команды find для поиска на компьютере файлов с именем config. Мы будем искать файлы config, начиная с корневого каталога /. Для этого вам нужно выполнять команду от имени пользователя root, чтобы иметь достаточно прав доступа, иначе получите сообщения «Permission denied». Итак, выполним команду:

find / -name config -print

Команда означает следующее: искать файлы с именем config (-name config), начиная с каталога / (первый параметр команды find) и выводить имена файлов на экран (аргумент -print). Отмечу, что поиск рекурсивный, то есть при поиске просматриваются все вложенные директории. Как видите все просто. Теперь рассмотрим синтаксис команды и перейдем к обзору ее основных аргументов.

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

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

Поиск всех файлов с расширением .old и их удаление: find / -name «*.old» -exec /bin/rm {} ; Поиск всех файлов, размер которых превышает 100 МБ и их удаление: find / -size 100M -exec /bin/rm {} ; Бывают и такие случаи, что программы «сходят с ума» и заполняют директории тысячами мелких файлов, при этом вы не сможете просто использовать команду rm * по той причине, что командная оболочка не в состоянии заменить символ * на имена всех этих файлов, зато в состоянии удалить эти файлы по очереди: find . -exec /bin/rm {} ;

В старых системах Unix у вас не будет возможности использовать параметр -delete, поэтому альтернатив параметру -exec для удаления файлов в них не остается.

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

Рекурсивное изменение прав доступа для файлов, не затрагивающее директории.find ./ -type f -exec chmod 644 {} ;

При помощи параметра -type f вы можете вести поиск только файлов и просто изменять права доступа к каждому из них при помощи chmod.

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

Найти в текущем каталоге обычные файлы размером больше 1000 байт и выполнить над ними команду ls -dils (действие ls).

:/>  Передать параметры cmd

find . -size 1000c -type f -ls

Найти в текущем каталоге обычные файлы, начинающиеся с символа тильда «~», и для каждого файла выдавать запрос на его удаление (на выполнение команды rm).

find . -name «~*» -type f -ok rm {} ;

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

Найти в текущем каталоге обычные файлы (не каталоги), имя которых начинается с символа «~».

find . -type f -name «~*» -print

Найти в текущем каталоге файлы, измененные позже, чем файл file.bak.

find . -newer file.bak -type f -print

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

Найти в текущем каталоге файлы, начинающиеся с символа «~» или c «temp» и являющиеся именно обычными файлами (-type f), а не каталогами.

find . ( -name «~*» -or -name «temp*» ) -type f -print

Найти в текущем каталоге (не обрабатывая подкаталоги — -maxdeph 1) обычные файлы (-file f) размером больше 600 мегабайт и менее 1 гигабайта (-size) или файлы имя которых заканчивающиется на «.mpeg» (-name).

find . -maxdepth 1 ( ( -size 600M -and -size -1G ) -or -name «*.mpeg» ) -and -type f

Прочие материалы по работе с командной строкой windows:

  Настройка командной строки
Windows. – Как изменить цвет фона, цвет символов, размер и расположение окна командной строки. Копирование и вставка текста в окне консоли.
Как настроить дополнение имен файлов и каталогов при наборе в командной строке. Использование функциональных клавиш.

  Работа с командной строкой Windows – Основные приемы, используемые при работе в командной строке Windows.

  Командные файлы Windows – Общие принципы применения переменных среды в командных файлах. Обработка параметров командной строки. Использование меток, переходов и циклическая обработка данных. Практические примеры решения задач администрирования системы.

 Запуск приложений от имени администратора без запроса UAC – Как запустить из командного файла приложение или командный файл без запроса системы контроля учетных записей UAC

 
Работа с сетью в командной строке.
– подробное описание команд CMD Windows для работы с сетью и примеры их использования.

  Подсистема Linux в Windows 10 – Использование командной строки Linux в Windows 10.

В начало страницы             |            
На главную страницу сайта

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

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

Справочник по командам cmd windows

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

В разных версиях ОС семейства Windows набор поддерживаемых команд, их параметры командной строки, синтаксис и отображение результатов выполнения могут различаться. Одна и та же утилита командной строки может присутствовать в стандартной поставке одной версии Windows, но отсутствовать в другой, или входить в состав дополнительных средств, как например, Resource Kit или Software Development Kit.

На данной странице представлено описание не только внутренних команд CMD, но и стандартных утилит командной строки, входящих в состав конкретных версии операционной системы (ОС) семейства Windows. Некоторые из приведенных команд устарели, и больше не поддерживаются разработчиком или не имеют смысла в современных операционных системах, что отмечается в описании команды.

Список команд постоянно обновляется и включает в себя все новейшие команды, добавляемые в стандартную поставку при выходе новых версий или обновлений ОС Windows 10.

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

ARP – просмотр и изменение таблиц ARP (Address Resolution Protocol)

ASSOC – просмотр или изменение сопоставлений расширений файлов приложениям

AT – управление планировщиком задач

ATTRIB – изменение атрибутов файлов

Auditpol – управление политиками аудита.

BASH – командная оболочка BASH в подсистеме Windows для Linux (WSL).

BCDBOOT – копирование в системный раздел файлов загрузки и создание
нового хранилища конфигурации загрузки (BCD)

BCDEDIT – редактирование хранилища данных конфигурации загрузки (BCD)

BOOTCFG – редактирование параметров загрузки в файле boot.ini

BOOTIM – вызов меню загрузки и восстановления (Выбор действия) Windows 10

BOOTREC – восстановление загрузочных записей и конфигурации загрузки Windows

BOOTSECT – редактирование загрузочных секторов для обеспечения загрузки NTLDR или BOOTMGR

BREAK – включить или выключить обработку комбинации клавиш CTRL C в DOS

CACLS – редактирование списков управления доступом к файлам (ACL – Access Control List)

CALL – вызов из командного файла подпрограмм или других командных файлов

CD – смена каталога (Change Directory)

Заключение

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

[spoiler title=»Источники»]

[/spoiler]

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