Поиск файлов из командной строки :: Хранитель заметок
Главным инструментом для поиска файлов служит утилита find. Она имеет множество параметров, которые позволяют задавать различные условия.
Поиск по имени файла
домашняя папка пользователя в качестве начального пути для поиска
-name
поиск по имени файла
Так же можно делать поиск по части имени
У параметра name есть альтернатива iname — игнорирование регистра символов.
Поиск по дате и времени
У файлов учитывается время создания (create), доступа (access) и изменения (modification). Соответственно параметры поиска начинаются с первых букв соответствующих английских слов.
Ищем файлы в текущей папке, которые открывались менее 30 минут назад.
Ищем файлы в текущей папке, время создания которых отличается от текущего на 2 часа.
В единицах интервала времени можно использовать модификаторы + или —, чтобы обозначить условие больше или меньше соответственно.
Поиск по размеру
Эта команда выдаст список файлов, размер которых больше 10 мегабайт.
А эта — список файлов, размер которых меньше 10 килобайт.
Поиск по содержимому файла
Утилита find сама не осуществляет поиск по содержимому, но ее можно использовать, чтобы задать другие граничные условия поиска. А внутри файла можно найти строку с помощью утилиты grep.
Найдем файлы в домашней папке пользователя, размер которых меньше 10 килобайт и содержащих строку «hello»
-print0
имена файлов будет разделены символом \0
xargs
специальная утилита, которая получает из стандартного ввода набор строк и передает их в качестве аргументов следующей утилите (в нашем случае утилите grep)
-0
строки разделены символом \0
Подробнее о параметрах
Все параметры и их значения можно узнать из документации по соответствующим утилитам
Поиск файлов через командную строку Windows (один из способов)
Приветствую, уважаемые участники проекта Habrahabr. Сегодня я хочу рассказать вам как выполнить поиск файлов в интерпретаторе командной строки Windows — cmd.exe. Я не буду вам писать такую команду, как dir или find. Мы сегодня рассмотрим другой, более лучший способ.
Давайте представим такую ситуацию: «Вы начинающий программист, и вам стоит задача: Сделать импорт всех (или некоторых файлов) из определенного каталога. Причем, чтобы можно было искать любые файлы, с любым названием и расширением. При этом импорт должен быть помещен в один файл. С сохранением всех путей файлов, построчно».
Вот как будет выглядеть данный код:
А теперь, давайте разберем, что он делает!
Первая строка кода:
Скрывает все происходящее в командном файле, и параллельно меняет заголовок командной строки.
Вторая строка кода:
Выводит статус операции.
Третья строка кода:
Иницилизация цикла For.
Четвертая строка кода:
Иницилизация цикла If.
Пятая строка кода:
Условие если файл найден.
Восьмая строка кода:
Очистка крана, и вывод конечного сообщения об окончании операции.
Девятая строка кода:
Пауза, перед закрытием пакетного файла и запуск файла с результатами.
Поиск файлов в командной строке Windows
Начиная с Windows 7 в операционных системах от Microsoft можно использовать команду WHERE, чтобы найти нужные файлы.
Синтаксис команды where выглядит следующим образом:
WHERE [/R каталог_для_поиска] [/Q] [/F] [/T] [шаблон_для_поиска]
Разберём используемые в команде параметры.
R — рекурсивный поиск и отображение файлов, соответствующих указанному шаблону, начиная с указанного каталога;
Q — возврат только кода выхода без отображения списка найденных файлов («тихий режим»);
F — отображение имён найденных файлов в кавычках;
T — отображение размера, даты и времени изменения найденных файлов.
Пользоваться командой where просто. Но учитывайте, что нужно указывать расширение искомого файла. Либо использовать * , чтобы команда нашла файлы всех расширений с подобным именем.
Обратите внимание на скриншот ниже. Шаблона test команде where оказалось недостаточно. А вот когда мы написали test*, команда поняла, что после test может быть что угодно, в том числе и любое расширение.

Продолжаем. Вводим команду
и видим информацию о размере, дате и времени редактирования файла. В данном случае наш файл пуст.

Обратите внимание, что по умолчанию (без параметра R) поиск осуществляется в текущем каталоге и каталогах, заданных значением переменной среды PATH.
Это значит, что если мы хотим поискать на всём диске C, нам необходимо использовать следующую конструкцию:
Как видите, поиск выдал нам расположение двух файлов, содержащих в имени file_test.

Если нам лучше известно местоположение искомого файла, мы можем сузить зону поиска, указав каталог:

Конечно, мы можем поискать все файлы с одним определённым расширением:

Можно использовать знаки вопроса, которые означают, что символ может быть любым. Их отличие от звёздочки в том, что звёздочка не регламентирует число символов, а количество знаков вопроса строго увязано с числом символов.
Ниже пример: сперва мы использовали конструкцию ??le_test*, и команда поняла, что первые два символа могут быть любыми, потом должно идти «le_test», а дальше любые символы. Под этот шаблон подходит file_test.xlsx. А вот под шаблон ?le_test* он уже не подходит. Так как в этом шаблоне перед «le_test» стоит всего один любой символ.

Может ли шаблон содержать сразу несколько разных имён файлов или несколько разных расширений? Может! Как видно на скриншоте ниже, сначала мы поискали файлы с расширениями .xlsx и .txt, а затем файлы, в имени которых содержится file_test или test. В обоих случаях команда where нашла такие файлы.

Пример использования параметра F (добавляет кавычки):

Пару слов о параметре Q. Как уже было сказано, он используется для того, чтобы не отображать месторасположение файлов. При использовании параметра Q команда where просто выведет результаты поиска — найдены искомые файлы или нет. Для вывода результата команда использует переменную ERRORLEVEL, которая может принимать три значения:
0 — искомые файлы найдены;
1 — искомые файлы не найдены;
2 — во время поиска произошла ошибка.
Как видите, файл test.txt в каталоге c:\mega есть, а файла test.pdf нет.

Возможно, кому-то станет интересно, какое значение примет переменная ERRORLEVER, если одновременно поискать присутствующий и отсутствующий файлы. Она примет значение 0, и это не зависит от порядка написания имён файлов.

Обычно параметр Q используют в командных файлах, когда в зависимости от результатов поиска нужно выполнить то или иное действие.
И, конечно, результаты поиска можно перенаправить в файл:
Как видите, команда where это довольно мощный инструмент для поиска файлов в Windows.
How to do a simple file search in cmd
I want to quickly search for a file given its name or part of its name, from the windows command line (not power shell). This is similar to opening explorer and using the search box at the top.
Note: dir can search based on a string template but it will not search in the subdirectories.
Note2: findstr can be used to search for a token inside files and has a recursivity flag; it’s funny that a more complex find can be easily discovered .
5 Answers 5
dir /s *foo* searches in current folder and sub folders.
It finds directories as well as files.
/s Lists every occurrence of the specified file name within the specified directory and all subdirectories.
searches for all txt file in the directory tree. Before using it just change the directory to root using
you can also export the list to a text file using
and search within using
EDIT 1: Although this dir command works since the old dos days but Win7 added something new called Where
will search for exe & dll in the drive c:\Windows as suggested by @SPottuit you can also copy the output to the clipboard with
just wait for the prompt to return and don’t copy anything until then.
EDIT 2: If you are searching recursively and the output is big you can always use more to enable paging, it will show — More — at the bottom and will scroll to the next page once you press SPACE or moves line by line on pressing ENTER