0

我有这个脚本:

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”(及其子目录)中搜索所有包含“.swf”一词的 HTML 文件。ANd 将使用结果写入一个 CSV 文件。

但是我也想在同一行中获取文件大小(现在,脚本在一行中输出 grep 结果 - 它没有文件大小 - 在另一行中输出 printf 结果 - 其中包括文件大小)。如何向 grep 添加选项以获取文件大小?

4

1 回答 1

3

一种不太冗长的方法是使用递归 grep(如果您的系统支持它):

grep -rl --include="*.htm*" ".swf" test|xargs ls -l|awk '{ print $9 "," $5 }'

解释 :

  • 使用“rl”标志递归地grep
  • 包含文件模式“*.htm”
  • 在每个 htm* 文件中搜索字符串“.swf”
  • 仅在“test”目录下搜索
  • 将结果通过管道传输到xargs,其中每个文件名都成为“ls -l”命令的参数
  • 然后使用awk仅获取文件名和文件大小。在 awk print 的第 9 列和第 5 列之间使用逗号“,”来获取 csv 输出。

随意将“ls -l”替换为人类可读的变体,例如“ls -lk”或“ls -lh”

或者,在您的脚本中,您可以只打印每个文件的第二行(包含大小的那个)。您可以像这样管道和使用 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]"
于 2020-01-29T23:56:31.410 回答