Как использовать "find "и" grep", чтобы получить размер файла тоже?

Как использовать "find "и" grep", чтобы получить размер файла тоже?

30.01.2020 12:03:11 Просмотров 30 Источник

У меня есть этот сценарий:

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, чтобы получить размер файла?

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/59975536/how-to-use-find-and-grep-to-get-the-file-size-too#comment106067069_59975536
у grep такой функции нет. если вы хотите объединить каждую из двух строк, удалив подачу строк между ними, используйте sed
https://stackoverflow.com/questions/59975536/how-to-use-find-and-grep-to-get-the-file-size-too#comment106067269_59975536
Никогда не слышал об этой команде. Не знаю, как это использовать в моем примере...но я не хочу объединять эти две строки, Я хочу, чтобы только размер файла был добавлен к результату grep.
https://stackoverflow.com/questions/59975536/how-to-use-find-and-grep-to-get-the-file-size-too#comment106068579_59975536
Не знаю, как использовать bash для этого: найти test-type f (- iname *.html-o-iname *.htm-o-iname *.xhtml ) - exec bash-c 'grep-il".swf "' {}\; > result-swf-файлы.csv я попробовал, и сценарий, кажется, работает вечно....
https://stackoverflow.com/questions/59975536/how-to-use-find-and-grep-to-get-the-file-size-too#comment106069661_59975536
Вы ищете размер файла html-файла или размер файла swf-файла?

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

Является ответом!
Thyag

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]"
Закрыть X