Как использовать "find "и" grep", чтобы получить размер файла тоже?
У меня есть этот сценарий:
find test -type f \( -iname \*.html -o -iname \*.htm -o -iname \*.xhtml \) -exec grep -il ".swf" {} \; -printf '%k KB - \t %p\n' > result-swf-files.csv
Это приведет к поиску в каталоге" test "(и его подкаталогах) всех HTML-файлов, содержащих слово".СВФ " в них. И напишет CSV-файл с результатами.
Но я хочу также получить размер файла в той же строке (теперь скрипт выводит в одной строке результат grep-который не имеет размера файла-и в другой строке результат printf-который включает размер файла). Как добавить опцию в grep, чтобы получить размер файла?






Ответы - Как использовать "find "и" grep", чтобы получить размер файла тоже? / How to use "find" and "grep" to get the file size too?

30.01.2020 02:56:31
Менее подробный способ - использовать рекурсивный grep (если ваша система поддерживает его):
grep -rl --include="*.htm*" ".swf" test|xargs ls -l|awk '{ print $9 "," $5 }'
Объяснение :
- Grep рекурсивно использует флаг "rl"
- включить шаблон файла"*.htm"
- ищите строку".swf " в каждом htm * файле
- искать только по каталогу "test"
- передайте результат в xargs, где каждое имя файла становится аргументом команды" ls-l".
- Затем используйте awk, чтобы получить только имя файла и размер файла. Используйте запятую ", " между 9-м и 5-м столбцами в awk print, чтобы получить вывод csv.
Не стесняйтесь заменять "ls-l" на удобочитаемые варианты, такие как" ls-lk " или " ls-lh"
Кроме того, в вашем скрипте вы можете просто распечатать только 2-ю строку каждого файла (ту, которая содержит размер). Вы можете просто трубить и использовать grep следующим образом: grep "[0-9] [KB]"
Ниже приведена полная команда:
find . -type f \( -iname \*.html -o -iname \*.htm -o -iname \*.xhtml \) -exec grep -il ".swf" {} \; -printf '%k KB - \t %p\n'| grep "[0-9] [KB]"