Мне нужно найти текст внутри zip-файлов. Я использую Cygwin. Некоторые zip-файлы пустые. Очевидно, я вообще не хочу иметь «шумную» информацию об этих «пустых zip-файлах». Например
find . -iname '*.zip' -print -exec unzip -l {} \; |grep -i vbs
Где vbs
находится строка, которую я ищу?
Проблема в том, что он возвращает то, что я ищу, но при этом возвращает много шума, например, такие строки:
C\ProgramData\ABC\DEF\VBScripts\OutputArchiveFiles.vbs
warning [/z/XYZ/Backup/123/456/Backup Set 1/Backup Files 1/Backup files 2.zip]: zipfile is empty
Я не хочу видеть эти строки с надписью «zip-файл пуст».
Я пробовал передать его по конвейеру, |grep -v 'zipfile is empty'
но он все равно выводит эти строки.
Мой вопрос: как мне избежать вывода этих «пустых» строк и видеть только те строки, которые я ищу, т. е. vbs?
решение1
Эти дополнительные линии, вероятно, находятся в stderr
потоке. Вы можете проверить, посмотрев, есть ли ониперенаправить в отдельный файл(например command 2> error.txt
)
В общем, запустите:
find . -iname '*.zip' -print -exec unzip -l {} \; 2> error.txt |grep -i vbs
Если это решит вашу проблему, вы можете заменить error.txt
на /dev/null
(это может работать не во всех версиях cygwin)