Мне нужно создать скрипт для поиска через менее миллиона файлов текста, кода и т. Д., Чтобы найти совпадения, а затем выводить все удары по определенному строковому шаблону в файл CSV.Оптимизация сценария простого поиска в PowerShell
До сих пор я делал это;
$location = 'C:\Work*'
$arr = "foo", "bar" #Where "foo" and "bar" are string patterns I want to search for (separately)
for($i=0;$i -lt $arr.length; $i++) {
Get-ChildItem $location -recurse | select-string -pattern $($arr[$i]) | select-object Path | Export-Csv "C:\Work\Results\$($arr[$i]).txt"
}
Это возвращает мне файл CSV с именем «foo.txt» со списком всех файлов со словом «Foo» в нем, и файл с именем «bar.txt» со списком всех файлов содержащий слово «бар».
Есть ли способ подумать об оптимизации этого сценария, чтобы заставить его работать быстрее? Или идеи о том, как сделать совершенно другой, но эквивалентный сценарий, который работает быстрее?
Все данные оцениваются!
Сколько стоит сейчас (только из любопытства)? Вам нужны только пути к файлам, которые содержат совпадения в выходе? –
Теперь в массиве требуется ~ 2 часа pr. Я только что немного узнал трюк с мерой-командой, я увижу, будет ли производительность увеличиваться по мере кэширования процесса. - Мне нужны только пути к файлам, которые содержат совпадения, да – cc0
Я также могу добавить, что длина каждого элемента массива (строки) значительно влияет на время обработки. Во время первого прогона загрузка процессора составляла около 15-20%. Сейчас это около 4-5%. Интересный материал. – cc0