Аналог find для windows

Мне кажется, давно зреет тема сравнения возможностей PowerShell и оболочек мира UNIX. Сравнения не в холиварном смысле этого слова, а в позитивно-конструктивном. Линуксовым скриптописателям (не фанатикам), думаю, будет интересно узнать, как делаются те или иные штуки, которые они привыкли делать на bash или zsh, на PowerShell. Пожалуй, я и начну такую тему — и очень надеюсь, что кто-то из моих коллег-повершелловцев (Guderian, ApeCoder) также поддержит эту тему.

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

$ find -name \*.cpp -o -name \*.hpp -exec grep -Hb class {} \;

Давайте посмотрим, что предлагает нам PowerShell для этих целей.

Прежде всего, давайте попытаемся заменить grep. Для аналогичных целей в окружении PowerShell есть коммандлет Select-String. Попробуем что-нибудь простое:

$ Select-String class *.hpp

CustomTimeEdit.hpp:5:class CustomTimeEdit : public QTimeEdit {
DaySelecter.hpp:12: class Model : public QAbstractItemModel
DaySelecter.hpp:43: class View : public QTreeView
[...]

Здесь мы ищем все вхождения слова class во всех файлах с расширением hpp в текущем каталоге. К слову сказать, документация по Select-String даёт нам неверную информацию о порядке следования аргументов: там написано, что первым должно следовать имя файла (параметр -Path), а следом за ним — шаблон поиска (параметр -Pattern). Но на самом деле всё наоборот (уж не знаю, почему). Естественно, если использовать не позиционные, а именованые параметры, то такой проблемы не возникает.

Идём далее: что, если мы хотим поискать указанную строку в файлах, имена которых могут совпадать с несколькими шаблонами (например, как hpp-, так и cpp-файлы):

$ Select-String DaySelector *.hpp,*.cpp

DaySelecter.hpp:1:#ifndef __DAYSELECTER_HPP__
DaySelecter.hpp:2:#define __DAYSELECTER_HPP__
DaySelecter.hpp:10:namespace DaySelecter {
[...]

Что, если мы хотим найти в этих файлах несколько шаблонов поиска:

$ Select-String DaySelector,MainWindow *.hpp,*.cpp

DaySelecter.hpp:1:#ifndef __DAYSELECTER_HPP__
DaySelecter.hpp:2:#define __DAYSELECTER_HPP__
DaySelecter.hpp:10:namespace DaySelecter {
MainWindow.hpp:1:#ifndef __MAINWINDOW_HPP__
MainWindow.hpp:2:#define __MAINWINDOW_HPP__
MainWindow.hpp:4:#include
[...]

На самом деле, оба параметра (и -Path, и -Pattern) принимают массивы строк (которые в PowerShell задаются при помощи запятой).

Но вы ведь помните, что PowerShell оперирует не текстом, а объектами? Давайте посмотрим, объекты какого рода выдаёт нам Select-String:

$ Select-String DaySelector *.hpp,*.cpp | gm

TypeName: Microsoft.PowerShell.Commands.MatchInfo

Name         MemberType Definition
----         ---------- ----------
Equals       Method     bool Equals(System.Object obj)
GetHashCode  Method     int GetHashCode()
GetType      Method     type GetType()
RelativePath Method     string RelativePath(string directory)
ToString     Method     string ToString(), string ToString(string directory)
Context      Property   Microsoft.PowerShell.Commands.MatchInfoContext Context {get;set;}
Filename     Property   System.String Filename {get;}
IgnoreCase   Property   System.Boolean IgnoreCase {get;set;}
Line         Property   System.String Line {get;set;}
LineNumber   Property   System.Int32 LineNumber {get;set;}
Matches      Property   System.Text.RegularExpressions.Match[] Matches {get;set;}
Path         Property   System.String Path {get;set;}
Pattern      Property   System.String Pattern {get;set;}

Как видите, мы не только можем посмотреть вывод команды, но и буквально разобрать его на части — выделить на какой строке и в каком файле произошло совпадение. Мы можем построить какой нам нужен вывод данных самостоятельно (например, в XML). По-моему, это очень увлекательно и удобно. То, чего часто не хватает в zsh.

Мне кажется, основная идея понятна; Select-String предоставляет нам следующие возможности:

  • поиск по регулярным выражениям (поведение по-умолчанию),
  • поиск по буквальному совпадению (переключатель -Simple),
  • поиск только первого совпадения в файле, игнорируя все последующие (переключатель -List),
  • или, наоборот, поиск всех совпадений, даже если в одной строке их несколько (переключатель -AllMatches),
  • выполнять поиск строк, не совпадающих с шаблоном (переключатель -NotMatch) — аналог ключа -v утилиты grep,
  • кроме непосредственно совпавшей строки, выводить несколько предыдущих и следующих строк (аргумент -Context) — очень похоже на то, как работает unified diff.

Что очень важно для нашего пользователя, Select-String поддерживает возможность указания кодировки файла (параметр -Encoding). Но, увы, в силу неких причин список кодировок ограничен юникодными кодировками, а также ANSI (a.k.a. WINDOWS-1251 в наших ОС) и OEM (CP866, «досовская»). Почему не сделали более широкий выбор, до меня не доходит (дотнет же, широта возможностей, всё такое), хотя и этого набора вполне хватает в большинстве случаев.

Посмотрим теперь, как искать файлы в дереве каталогов. В PowerShell для этого используется Get-ChildItem, или ls (опять же, алиас). Я не знаю всех возможностей UNIX’ового ls, но наш коммандлет из PowerShell — довольно мощная штука. Мы можем получить список всех файлов, совпадающих с указанными шаблонами:

$ ls -r -inc *.cpp,*.hpp

Обратите особое внимание — в аналогичных условиях в bash или zsh нам пришлось бы эскейпить звёздочки, т.к. они раскрываются самой оболочкой. В PowerShell несколько иной подход: шаблоны передаются непосредственно коммандлету и он уже при помощи внутреннего окружения PowerShell раскрывает их в нужных местах (я не знаком с внутренней кухней PowerShell, но принцип примерно таков). Это очень удобно для меня, т.к. в подобных случаях в Linux я часто получал нерабочие скрипты, и долго думал, из-за чего они не находят файлы. Но это, конечно, просто моя невнимательность.

Вернёмся к ls. Попробуем найти файлы, которые не совпадают с шаблоном:

$ ls -r -ex *.hpp~

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

$ ls -r -inc *.cpp,*.hpp -ex DaySelecter*

Если вам нужно ещё больше контроля над поиском, используйте коммандлет Where-Object — помните? PowerShell передаёт по пайпам объекты, а не текст:

$ ls -r -inc *.cpp,*.hpp -ex DaySelecter* | ? { $_.IsReadOnly }

Хорошо, мы увидели возможности и ls, и Select-String. Как же нам теперь их объединить? Дело в том, что Select-String может получать список файлов как из командной строки (параметр -Path), так и из пайпа. Таким образом, мы можем просто объединить пайпом обе команды и получить нужный результат:

$ ls -r -inc *.cpp,*.hpp -ex *DaySelecter* | Select-String DaySelecter

MainWindow.cpp:26: connect(viewDaySelecter->selectionModel(),
MainWindow.cpp:38: viewDaySelecter->setDiary(diaryModel);

По-моему, довольно удобно!

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

Основные методы поиска файлов через командную строку

Существует несколько ключевых подходов к поиску файлов через командную строку, каждый из которых имеет свои особенности и области применения. Рассмотрим наиболее распространенные методы, которые используются как в Windows, так и в Linux-системах. Все эти методы базируются на специальных командах, которые позволяют выполнять поиск по различным параметрам: имени файла, расширению, размеру, дате создания или изменения.

Первый метод основан на использовании команды dir в Windows и ls в Linux. Эти базовые команды просмотра содержимого директорий можно дополнить различными параметрами для более точного поиска. Например, команда dir /s /b позволяет рекурсивно просматривать все подкаталоги начиная с текущей директории, выводя только пути к найденным файлам. Однако этот метод подходит лишь для простых случаев, когда известно точное имя файла или его часть. Более сложные задачи требуют применения специализированных команд, таких как find в Windows и find/find locate в Linux, которые обеспечивают гораздо более гибкие возможности поиска.

Особую эффективность демонстрирует использование команды where в современных версиях Windows и locate/updatedb в Linux-системах. Эти инструменты работают с предварительно созданной базой данных файлов, что значительно ускоряет процесс поиска. При этом важно понимать, что такие команды могут не показывать самые свежие файлы, так как база данных обновляется не мгновенно. Для получения актуальной информации лучше использовать find или аналогичные команды прямого поиска, которые сканируют файловую систему в реальном времени.

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

Сравнительная характеристика методов поиска

Метод Преимущества Недостатки
dir /s Простота использования, не требует дополнительных инструментов Медленная работа на больших дисках, ограниченные возможности фильтрации
find Гибкость в настройке параметров, возможность поиска по содержимому Требует времени на освоение синтаксиса, может быть медленным
where Быстрый поиск, удобный вывод результатов Только для Windows, ограниченная функциональность
locate Очень быстрый поиск, простой синтаксис Не показывает новые файлы, требует периодического обновления базы

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

Пошаговая инструкция поиска файлов в Windows

Рассмотрим подробную пошаговую инструкцию поиска файлов через командную строку в операционной системе Windows. Первым делом необходимо запустить командную строку от имени администратора – это обеспечит доступ ко всем каталогам системы. Нажмите клавиши Win+X и выберите “Командная строка (администратор)” или “Windows PowerShell (администратор)”, в зависимости от вашей версии Windows.

Для начала определите стартовую директорию поиска. Используйте команду cd для перехода в нужный каталог. Например, если вы хотите искать файлы начиная с диска C:, введите cd C:. Это важный шаг, так как он задает область поиска и влияет на производительность команды. Теперь можете применить команду dir с необходимыми параметрами. Основные варианты использования включают: dir /s /b filename.* для поиска файла по имени во всех подкаталогах, где * заменяет любое расширение; dir /s /b *.txt для поиска всех текстовых файлов; dir /s /b /a-d для поиска только файлов без папок.

Более продвинутый метод использует команду where, которая работает аналогично Unix-команде which. Формат команды: where /r path filename, где /r означает рекурсивный поиск, path – начальный путь поиска, filename – имя искомого файла. Например, where /r C:Users username.txt найдет все файлы username.txt в папке пользователя и её подпапках. Особенностью этой команды является возможность использования масок поиска и указания нескольких имён файлов одновременно.

Если вам нужно найти файлы по содержимому, используйте команду findstr. Её формат: findstr /s /m “искомый_текст” *.txt, где /s означает поиск во всех подкаталогах, /m выводит только имена файлов с совпадениями, “искомый_текст” – текст для поиска, *.txt – маска файлов для проверки. Эта команда особенно полезна при поиске конфигурационных файлов или логов, содержащих определенную информацию.

Важно отметить несколько ключевых моментов при работе с командной строкой Windows. Во-первых, регистр символов обычно не имеет значения, но некоторые параметры могут быть чувствительны к нему. Во-вторых, длинные пути могут вызывать проблемы – если путь превышает 260 символов, могут возникнуть ошибки. Для работы с длинными путями используйте префикс \? перед путём. В-третьих, всегда следите за правильным экранированием специальных символов, используя символ ^ или кавычки.

Продвинутые пользователи могут комбинировать команды через конвейер (|) для создания сложных цепочек поиска. Например, dir /s /b *.log | findstr “error” найдет все лог-файлы, содержащие слово “error”. Такие комбинации позволяют создавать мощные инструменты для автоматизации поиска файлов и анализа их содержимого. Кроме того, результаты поиска можно перенаправлять в файл для последующего анализа: dir /s /b > results.txt сохранит все найденные пути в текстовый файл results.txt.

Пошаговая инструкция поиска файлов в Linux

В Linux-системах поиск файлов через командную строку предлагает ещё более широкие возможности благодаря развитым инструментам и гибкости shell-среды. Начнем с самого универсального инструмента – команды find, которая позволяет осуществлять поиск по множеству критериев. Базовый синтаксис выглядит как find [путь] [параметры], где путь указывает начальную директорию поиска, а параметры определяют условия. Например, find /home -name “*.txt” найдет все текстовые файлы в домашней директории и её подкаталогах.

Особую ценность представляет возможность комбинирования различных условий поиска. Можно искать файлы по размеру (find . -size +100M), по времени модификации (find /var/log -mtime -7 для файлов, измененных за последние 7 дней), по типу (find / -type d для поиска только директорий). Дополнительные параметры -exec позволяют сразу выполнять действия над найденными файлами. Например, find . -name “*.tmp” -exec rm {} ; удалит все временные файлы в текущей директории и подкаталогах.

Альтернативным методом является использование команды locate, которая работает значительно быстрее благодаря предварительно созданной базе данных файлов. Однако эта база обновляется не мгновенно – обычно раз в день через cron-задачу updatedb. Поэтому для поиска новых файлов лучше использовать find. Пример использования: locate filename.txt найдет все файлы с таким именем в системе. Команда locate также поддерживает регулярные выражения и другие параметры для тонкой настройки поиска.

Для поиска по содержимому файлов существует команда grep, которая часто комбинируется с find для создания мощных цепочек поиска. Например, find /etc -name “*.conf” -exec grep -l “search_term” {} ; найдет все конфигурационные файлы, содержащие указанную строку. Дополнительные параметры grep, такие как -r (рекурсивный поиск) и -i (игнорирование регистра), делают этот инструмент ещё более гибким.

Linux предоставляет также специализированные утилиты для конкретных задач. Например, which и whereis помогают находить исполняемые файлы и связанные с ними документы. Команда which program_name покажет путь к исполняемому файлу программы, а whereis добавит информацию о связанных man-страницах и исходных кодах. Эти команды особенно полезны при работе с системными утилитами и программным обеспечением.

Важным аспектом работы с командной строкой в Linux является использование правильных прав доступа. Многие системные директории требуют root-прав для просмотра содержимого. В таких случаях следует использовать sudo перед командой поиска или запускать терминал с правами суперпользователя. Однако стоит помнить о безопасности – не рекомендуется постоянно работать с повышенными привилегиями, чтобы избежать случайного повреждения важных системных файлов.

Примеры комплексного поиска в Linux

  • Поиск всех исполняемых файлов в /usr/bin, измененных за последние 2 дня: find /usr/bin -type f -executable -mtime -2
  • Поиск файлов с расширением .log больше 10MB в /var/log: find /var/log -name “*.log” -size +10M
  • Поиск всех файлов, принадлежащих пользователю www-data: find / -user www-data
  • Поиск файлов с установленным битом SUID: find / -perm -4000
  • Поиск всех пустых файлов в домашней директории: find ~ -empty

Экспертное мнение: Александр Петров, системный администратор с 15-летним опытом

Александр Петров, сертифицированный специалист Red Hat и Microsoft Certified Systems Engineer, подчеркивает важность владения командной строкой для эффективного поиска файлов. “За годы работы я столкнулся с тысячами ситуаций, когда графические интерфейсы были бесполезны, а командная строка спасала положение,” – рассказывает эксперт. Его профессиональный опыт включает администрирование крупных корпоративных сетей и облачных инфраструктур.

По словам Александра, ключевым моментом является понимание особенностей файловой системы и выбор оптимального метода поиска. “Например, при работе с большими файловыми системами я всегда начинаю с команды locate, если время создания файла не критично. Но для точного поиска критически важных файлов использую find с детальной настройкой параметров.” Он также рекомендует обязательно учитывать права доступа и потенциальное влияние на производительность системы при выполнении ресурсоемких операций поиска.

Из практики эксперта: “Однажды мне потребовалось найти источник утечки конфиденциальных данных на сервере с терабайтами информации. Используя комбинацию find с grep и дополнительными фильтрами по времени модификации и размеру, удалось сузить круг поиска до нескольких подозрительных файлов всего за несколько минут. Без командной строки эта задача заняла бы часы.”

Александр советует начинающим администраторам сосредоточиться на освоении базового набора команд и постепенно расширять свои знания. “Главное – понимать принципы работы каждой команды и её параметров. Тогда вы сможете легко комбинировать их для решения самых сложных задач.”

Часто задаваемые вопросы о поиске файлов через командную строку

  • Как найти файл, если неизвестно точное имя? Используйте маски поиска (*, ?). Например, find . -name “report*.doc” найдет все документы Word, начинающиеся на “report”. В Windows можно применить where /r C: report*.doc.
  • Что делать, если поиск занимает слишком много времени? Ограничьте область поиска конкретной директорией вместо всего диска. В Linux используйте locate вместо find для быстрого поиска, предварительно обновив базу командой updatedb.
  • Как найти файлы определенного размера? В Linux используйте find с параметром -size (+100M для файлов больше 100MB). В Windows применим dir с дополнительной фильтрацией через forfiles: forfiles /P C:path /S /M *.txt /C “cmd /c if @fsize GEQ 1048576 echo @path”.
  • Можно ли искать файлы по содержимому? Да, используйте findstr в Windows или grep в Linux. Например, grep -rl “password” /etc/* найдет все файлы в /etc, содержащие слово “password”.
  • Как автоматизировать поиск файлов? Создайте batch-файл в Windows или shell-скрипт в Linux, объединяющий нужные команды. Добавьте его в cron (Linux) или планировщик задач Windows для регулярного выполнения.

Распространенные ошибки и их решения

При поиске файлов через командную строку пользователи часто сталкиваются с типичными проблемами. Одна из самых частых ошибок – неправильное указание пути поиска. Например, использование обратного слэша () вместо прямого (/) в Linux или наоборот в Windows может привести к ошибкам. Решение: внимательно проверяйте формат пути для вашей операционной системы и используйте двойные обратные слэши (\) в Windows при необходимости.

Другая распространенная проблема – игнорирование прав доступа. Попытка поиска в системных директориях без соответствующих привилегий приведет к неполному результату или ошибке доступа. Рекомендуется использовать sudo в Linux или запускать командную строку от имени администратора в Windows, но при этом строго контролировать выполняемые команды во избежание случайных изменений в системных файлах.

Многие пользователи забывают об ограничении длины пути в Windows (260 символов). Если файл находится в глубоко вложенной директории, стандартные команды могут его не найти. Решение: используйте префикс \? перед путем или примените специальные утилиты для работы с длинными путями. В Linux такой проблемы нет благодаря более гибкой файловой системе.

Ошибки синтаксиса при использовании масок поиска также встречаются часто. Например, find . -name *.txt без кавычек может привести к неправильной интерпретации команды. Всегда заключайте маски поиска в кавычки (“*.txt”) или экранируйте специальные символы. Это правило особенно важно при поиске файлов со специальными символами в имени.

Проблема с кодировкой может возникнуть при поиске по содержимому файлов, особенно в Windows. Команда findstr может некорректно обрабатывать файлы в UTF-8 без BOM. Решение: явно указывайте кодировку с помощью параметра /G: или используйте сторонние утилиты, поддерживающие Unicode.

Заключение и практические рекомендации

Владение навыками поиска файлов через командную строку – это необходимый инструмент каждого IT-специалиста и продвинутого пользователя. Мы подробно рассмотрели различные методы поиска как в Windows, так и в Linux-системах, разобрали практические примеры и выявили основные подводные камни. Главное преимущество командной строки – это скорость и точность поиска, возможность автоматизации рутинных задач и доступ к расширенным параметрам фильтрации.

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

Если вы хотите углубить свои знания, попробуйте комбинировать различные команды через конвейеры и перенаправление вывода. Изучите регулярные выражения – они значительно расширяют возможности поиска. Также рекомендуется ознакомиться с документацией по командам (man в Linux, help в Windows) для полного понимания всех доступных параметров.

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

TL;DR: gci -r -fi <filename-pattern>

My favorite use of find in bash is to find files whose name matches a pattern. For instance, find all the jar files under this directory:

bash# find . -name '*.jar'

In PowerShell, there’s a program called “find” but it ain’t the same program.

Short Answer

Instead, use Get-ChildItem. The arguments are different.

  • -Recurse (abbreviates to -r) says, go down all the directories.
  • -Filter <string> (abbreviates to -fi) selects by name. This supports * and ? wildcards, NOT regex.

Long version, which I would use in programs:

pwsh> Get-ChildItem -Recurse -Filter '*.jar'

or shorthand, for typing at the prompt:

pwsh> gci -r -fi *.jar

but I want regex

The -Filter command-line option here is an optimization. For programmatic filtering: use Get-ChildItem -Recurse to gather all the files under the current directory, and pipe them to a Where-Object (abbreviates to where) filter.

You can test properties, like matching the name against a regex:

gci -r | where Name -match '\.jar$'

like checking the size of the file, excluding too-small ones:

gci -r | where Length -gt 3000

like only the files I’ve looked at in the last hour:

gci -r | where LastAccessTime -gt (Get-Date).AddHours(-1)

In my PowerShell in Windows Terminal, I get tab-completion for the property names! This is based on the type of objects returned by the gci command before the pipe. Whoa cool!

For more flexibility, you can break into a code block, referencing the input with $_. How about… length greater than 3kb or else I wrote to it since a specific day:

gci -r | where { $_.Length -gt ( 3 * 1024 ) -or $_.LastWriteTime -gt "04/23/2020" }

but that’s so long

The query for “size is large enough or I’ve accessed it in the last hour” works in bash too (I think):

bash# find . -size +3k -o -amin +60

There are two reasons I like the PowerShell version better than bash’s find:

  • it scales up in complexity; you can write a whole program in there if you need to. find offers the conditions that it offers, and the combinations that it offers. (If you can say “name is *.jar and size is large or date is recent”, I couldn’t figure out how.)
  • The arguments to find are specific to find. Once you learn them, that knowledge doesn’t help you with any other command in bash. In PowerShell, the condition is expressed in the same language as everything else in PowerShell. That scales, in your head.

There’s one reason I like bash’s find better than PowerShell syntax:

I can type find . -name '*.jar' without thinking about it.

I have it memorized. It is familiar. That’s a property of me; it’s my shared history with bash that makes me productive in it, NOT its superiority.

So I don’t recommend going deep on bash. I recommend getting productive in PowerShell instead, because learning scales in a language with deep consistency.

Addendum: condense the output

The output of Get-ChildItem is a bunch of FileInfo objects. The default printing takes up a lot of room. You can get it to print the path (which is called FullName):

Get-ChildItem -Recurse -Include '*.json' | Select FullName

You can also get other properties from Select. To see them all, pipe to Get-Member instead. That lists available properties.

Home » Blog » Equivalent of UNIX Grep command in Dos/Windows

Last updated: May 22, 2010

You can use the ‘type’ and ‘find’ command in Dos/Windows to get the equivalent output of the UNIX ‘cat’ and ‘grep’ commands. The ‘find’ command can be very useful when you are trying to search for a specific text or phrase over multiple files. The ‘find’ command also comes in handy when searching for all the occurrences of a specific text or phrase in all the files under all the sub-directories of a given directory.

The Type Command

The ‘type’ command in Dos simply displays the contents of a text file or files. To see the content of a file simply enter the following in the command prompt:
C:>type “filename”

The Find Command

The ‘find’ command in Dos can be used to search for a text string in a file or files. below is the usage and optional parameters of the ‘find’ command.

FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "string" [[drive:][path]filename[ ...]]

/V         Displays all lines NOT containing the specified string.
/C         Displays only the count of lines containing the string.
/N         Displays line numbers with the displayed lines.
/I         Ignores the case of characters when searching for the string.
/OFF[LINE] Do not skip files with offline attribute set.
"string"   Specifies the text string to find.
[drive:][path]filename
Specifies a file or files to search.

If a path is not specified, FIND searches the text typed at the prompt or piped from another command.

Find Command Usage Examples

To find any text occurrence in all the files within a directory simply enter the following at the command prompt.

C:>find “text to find” *


D:\Project Material\find command example>find "text-align" *

---------- ADSENSE INSERTION TAG.TXT
<p style="text-align: center;"><!-- wp_ad_camp_1 --></p>
---------- CFORMS.PHP
echo '<p style="text-align: left;"><label for="cforms-title'.$no.'">';
---------- ROBOTS.TXT
---------- ROBOTS_LANGUAGE_FILTER.TXT
---------- TRANSLATION_PAGE.TXT

Use the ‘/n’ parameter to print out the line numbers.


D:\Project Material\find command example>find /n "text-align" *

---------- ADSENSE INSERTION TAG.TXT
[1]<p style="text-align: center;"><!-- wp_ad_camp_1 --></p>
[2]text-align
[3]Test line with the text text-align
[6]Another line with the desired text text-align

---------- CFORMS.PHP
[2269]          echo '<p style="text-align: left;"><label for="cforms-title'.$no.'">';

---------- ROBOTS.TXT

You can use ‘type’ and then pipe the output to the ‘find’ command:

D:\Project Material\find command example>type robots.txt | find /n "Disallow: /iw/"
[37]Disallow: /iw/

You can get really creative with these commands.

Reader Interactions

    msm.ru

    Нравится ресурс?

    Помоги проекту!


    Правила раздела Windows

    1. Указывайте версию Вашей ОС.
    2. Запрещается размещать запросы и ссылки на кряки, серийники и т.п., а также вопросы нарушения лицензии ПО и его взлома.
    3. Не разрешается давать советы из разряда «Поставь Linux».
    4. Переустановка ОС — крайнее и безотказное лекарство, которое знают все. В таких советах никто не нуждается.
    5. При публикации скриптов пользоваться тегами code. Тип подсветки кода выбирать строго в соответствии с языком публикуемого кода.
    6. Прежде чем задать вопрос, обязательно загляните в FAQ и следуйте написанным рекомендациям для устранения проблемы. И если не помогло, а поиск по разделу не дал результатов — только тогда задавайте вопрос на форуме.
    7. Вопросы, связанные с проблемами ПО, задавайте в разделе Программное обеспечение


    аналог unix-овского ‘find’ в Windows

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,

      Подскажите, какой есть способ осуществить групповую операцию с файлами в консоли Windows по заданному условию поиска?
      В linux есть утилита ‘find’ — подходящая для этой цели.
      Конкретно нужно — автоматизировать ежедневное удаление из заданной папки файлов старше 30 суток (фильтруя по дате создания).


      FullArcticFox



      Сообщ.
      #2

      ,

        Белый и пушистый

        Рейтинг (т): 288

        Цитата harinag @

        Конкретно нужно — автоматизировать ежедневное удаление из заданной папки файлов старше 30 суток (фильтруя по дате создания).

        Я мыслю что лучше для этого воспользоваться скриптами, покопай в этой теме Полезные скрипты
        А так же тут http://forum.oszone.net/thread-146190.html — фактически готовое решение


        grgdvo



        Сообщ.
        #3

        ,

          есть еще GnuWin32. findutils входит

          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

          0 пользователей:

          • Предыдущая тема
          • Windows
          • Следующая тема

          [ Script execution time: 0,0162 ]   [ 15 queries used ]   [ Generated: 14.05.25, 21:18 GMT ]  

          Понравилась статья? Поделить с друзьями:
          0 0 голоса
          Рейтинг статьи
          Подписаться
          Уведомить о
          guest

          0 комментариев
          Старые
          Новые Популярные
          Межтекстовые Отзывы
          Посмотреть все комментарии
        • Autoruns для windows 10 как пользоваться
        • Lusrmgr msc windows 10 home как включить
        • How to install windows to flash drive
        • C windows syswow64 msiexec exe
        • Samsung ml 1750 driver windows 10