У меня есть список из более чем 500 строк, которые мне нужно найти. (Это URL-адреса, если это имеет значение.) У меня есть веб-сайт с более чем 1000 веб-страницами. Я хочу искать на каждой из этих веб-страниц, чтобы найти, к каким URL-адресам привязаны ссылки.Как искать несколько файлов для нескольких строк
Назад, когда наш веб-сайт был в ящике Unix, я бы написал небольшой скрипт оболочки, используя find и grep, чтобы выполнить это, но теперь мы на машине под Windows, так что это не вариант. У меня нет опыта работы с PowerShell, но я подозреваю, что это то, что мне нужно. Однако я даже не знаю, как начать.
В идеале, я хотел бы в конечном итоге с что-то вроде этого:
<filename 1>
<1st string found>
<2nd string found>
<3rd string found>
<filename 2>
<1st string found>
<2nd string found>
мне не нужно знать номер строки; Мне просто нужно знать, какие URL-адреса находятся в файлах. (Мы собираемся переместить все 500 + целевых URL-адресов в новые местоположения, поэтому нам придется вручную обновлять ссылки на 1000+ веб-страницах. Это будет королевская боль.)
Предположительно, логика будет что-то вроде этого:
for each file {
print the filename
for each string {
if string found in file {
print the string
}
}
}
Мы не можем сделать поиска/замены непосредственно, так как веб-страницы находятся в системе управления контентом. Все, что мы можем сделать, это определить, какие страницы необходимо обновить (используя статическую копию веб-страниц на локальном диске), а затем вручную обновить отдельные страницы в CMS.
Я надеюсь, что это легко сделать, но мое полное незнание с PowerShell означает, что я понятия не имею, с чего начать. Любая помощь будет принята с благодарностью!
UpdateБлагодаря Travis шлепнуть за помощь! Основываясь на его ответе, вот окончательная версия кода, который я буду использовать.
# Strings to search for
$strings = @(
'http://www.ourwebsite.com/directory/somefile.pdf'
'http://www.ourwebsite.com/otherdirectory/anotherfile.pdf'
'http://www.otherwebsite.com/directory/otherfile.pdf'
)
# Directory containing web site files
cd \OurWebDirectory
$results = @(foreach($string in $strings)
{
Write-Host "Searching files for $string"
# Excluding the images directory
dir . -Recurse -Exclude \imagedir | Select-String -SimpleMatch $string
}) | Sort-Object -Property path
$results | Group-Object -Property path | %{
"File: $($_.Name)"
$_.Group | %{"`t$($_.pattern)"}
}
Итак, вы выскабливание КОНЦА видимая страница пользователя (как это будет выглядеть, т. е. только «тело») или полное содержимое HTML-содержимого? ((EDIT: Это важно, потому что нам нужно сохранить полный HTML и искать во всех полях 'href', например)). – gravity
[Findstr] (https://technet.microsoft.com/en-us/library/bb490907.aspx)? – n00dl3
У меня есть локальный доступ к файлам для файлов HTML, поэтому не требуется очистка экрана или сканирование в Интернете. –