Самый быстрый способ рекурсивной очистки файлов HTML на разделе? - PullRequest
0 голосов
/ 26 февраля 2012

скрипт для очистки HTML-файлов, т.е. удалить все после тега </HTML> (без кавычек), для всех файлов рекурсивно в разделе.Это похоже на восстановление содержимого веб-сервера после того, как вирус заразил / внедрил код в несколько файлов HTML

Ответы [ 2 ]

0 голосов
/ 26 февраля 2012

Начните с кода верхнего уровня, чтобы проверить:

  Dim aTests : aTests = Array( _
      Array( "", "", "" ) _
    , Array( "<html></html>junk", "</html>", "<html></html>" ) _
  )
  Dim aTest
  For Each aTest In aTests
      WScript.Echo qq(aTest(0))
      WScript.Echo qq(aTest(1))
      WScript.Echo qq(cutTail(aTest(0), aTest(1)))
      Wscript.Echo CStr(aTest(2) = cutTail(aTest(0), aTest(1)))
      WScript.Echo
  Next

функция, которая может решить вашу первую подзадачу - очистка строки:

Function cutTail(sTxt, sFnd)
  cutTail = sTxt
  Dim nPos : nPos = Instr(1, sTxt, sFnd, vbTextCompare)
  If 0 < nPos Then cutTail = Left( sTxt, nPos + Len(sFnd) - 1)
End Function

Написать голые кости Sub to traverseдерево папок и вызывайте подпункт «делай, что я хочу» для каждого найденного файла:

Sub walkDirs(oDir, fFile)
  Dim oItem
  For Each oItem In oDir.Files
      fFile oItem
  Next
  For Each oItem In oDir.SubFolders
      walkDirs oItem, fFile
  Next
End Sub

Протестируйте его с помощью простого работника Предоставленный подпункт:

  Dim sRDir : sRDir     = "..\data"
  Dim fFile : Set fFile = GetRef("justPrint")
  walkDirs goFS.GetFolder(sRDir), fFile

Sub justPrint(oFile)
  WScript.Echo "Processing:", qq(oFile.Path)
End Sub

Сначала напишитеверсия попытки для рабочего Sub, который очищает файл:

Sub cleanHtml(oFile)
  WScript.Echo "Processing:", qq(oFile.Path)
  Dim sAll : sAll = cutTail(OFile.OpenAsTextStream(ForReading).ReadAll(),"</html>")
  OFile.OpenAsTextStream(ForWriting).Write sAll
End Sub

Используйте его в тестовой папке с типичным набором образцов файлов.Поищите проблемы:

Будет ли срез cutTail для таких данных, как:

, Array( "<html></html>", "</HTml>", "<html></html>" ) _
, Array( "<html><!--</html>-->keep</html>junk", "</HTml>", "<html><!--</html>-->keep</html>" ) _

Произойдет ли сбой обхода из-за ограничений безопасности?

Не закроется ли ваш скрипт.или .jpg файлы?

0 голосов
/ 26 февраля 2012

Вы пометили этот вопрос "vbscript" и "wscript", о которых я понятия не имею, но если у вас есть доступ к системе Unix или Linux, вы можете использовать эту командную строку:

find /path/to/root -exec grep -qi '</html>' -exec sed -ne -i'' 's|</html>.*|</html>|I;1,/<\/html>/Ip' {} \;

Проверьте параметры командной строки для sed, чтобы убедиться, что параметр -i используется правильно. Это работает для меня во FreeBSD.

Всегда делайте резервные копии своих данных, прежде чем пытаться что-либо подобное.

...