Есть ли что-то вроде команды GNU locate в PowerShell?
Есть ли эквивалент GNU locate
команда в Windows 7/8?
locate
может принимать в качестве входных данных имя файла и выдает в качестве выходных данных все пути, в которых находятся файлы, имена которых аналогичны входным, например:
locate file-with-long-name.txt
/var/www/file-with-long-name.txt
5 ответов
Нет, нет встроенного командлета Windows или PowerShell, эквивалентного Linux/GNU locate
команда. Однако функциональные эквиваленты включают в себя cmd.exe dir /s
как описано JKarthik
и эти параметры PowerShell:
PS> Get-ChildItem -Recurse . file-with-long-name.txt
Обратите внимание на использование .
, сообщая PowerShell, с чего начать поиск. Вы можете, конечно, сократить при наборе в командной строке:
PS> gci -r . file-with-long-name.txt
Я делаю это много, поэтому я добавил функцию в свой профиль:
PS> function gcir { Get-ChildItem -Recurse . @args }
PS> gcir file-with-long-name.txt
Это позволяет подстановочные знаки, похожие на locate
:
PS> gcir [a-z]ooo*.txt
Увидеть help about_Wildcards
Больше подробностей. Это также может быть написано с Where-Object
как это:
PS> gcir | where { $_ -like "[a-z]ooo*.txt"}
locate
имеет возможность сопоставить с регулярными выражениями. Как и PowerShell:
PS> gcir | where { $_ -match "A.*B" }
PowerShell поддерживает полные регулярные выражения.NET. Увидеть about_Regular_Expressions
,
Вы также можете выполнять другие типы запросов:
PS> gcir | where { $_.Length -gt 50M } # find files over 50MB in size
Производительность этих подходов медленна для больших коллекций файлов, поскольку она просто ищет файловую систему. GNU locate
использует базу данных. В Windows теперь есть база данных с возможностью поиска, которая называется Windows Desktop Search. Существует API для WDS, который кто-то обернул командлетом PowerShell, здесь: http://www.codeproject.com/Articles/14602/Windows-Desktop-Search-Powershell-Cmdlet, позволяющий выполнять следующие действия:
PS> get-wds “kind:pics datetaken:this month cameramake:pentax”
с гораздо лучшей производительностью, чем Get-ChildItem
и этот вид богатого запроса (и неудобного синтаксиса). Также обратите внимание, что фигурные кавычки прекрасно работают в PowerShell, поэтому нет необходимости редактировать этот образец при его копировании / вставке.
Может быть, кто-то найдет (или напишет) командлеты PowerShell, которые разрешают идиоматические запросы к WDS.
Для решения PowerShell попробуйте следующее:
Get-ChildItem -Filter "file-with-long-name.txt" -Recurse
Это возвращает все файлы, которые соответствуют заданному имени в текущем каталоге и его подкаталогах.
-Filter
Параметр принимает подстановочные знаки. Если текущий каталог содержит системные файлы, к которым у вас нет доступа, добавьте -ErrorAction SilentlyContinue
подавить ошибки.
Для получения дополнительной информации см. Get-Help Get-ChildItem
,
Вы можете использовать следующую команду в оболочке Windows:
dir [filename] /s
Где имя файла - это имя файла, который вы ищете, и /s
относится к подкаталогам в поиске.
Обновить следующую команду с /B
показывает только голый формат, именно так, как требуется. И это, кажется, немного быстрее.
Попробуйте:
dir [filename] /s /B
Вы можете установить Cygwin, чтобы имитировать набор инструментов Linux, или установить порт MinGW, и вы получите доступ к оболочке, почти знакомой с родной системой Linux.
Если вы не привыкли к поиску UNIX , вы не знаете, чего вам не хватает.
locateмгновенно возвращает имена файлов только с каждого диска вашего ПК .
Введите:
найдите какое-нибудь имя файла
и каждое указанное имя будет отображаться мгновенно . Он НЕ будет искать фрагменты внутри ваших файлов. Скорость определяется базой данных, запущенной с помощью updateb , что может занять некоторое время и обычно представляет собой ежедневное задание cron.
Я не смог найти ничего полезного в этой теме, поэтому добавил свое решение: установите Cygwin64, откройте терминал, обновите b , затем найдите
Я провел тест, чтобы выявить различия в производительности, я выполнил поиск putty.exe.
На Win10 это заняло 12 минут 50 секунд в проводнике и 4 секунды в терминале Cygwin.
Меня не интересовали фрагменты, что было «бонусом» при поиске в Проводнике, из-за которого поиск занимал больше времени. Да, индексация включена.