linux 如何使用“find”和“grep”来获取文件大小呢?

i2loujxw  于 2023-01-25  发布在  Linux
关注(0)|答案(2)|浏览(217)

我有这样的脚本:

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文件,并将结果写入CSV文件。
但是我还想在同一行中获得文件大小(现在,脚本在一行中输出grep结果-它没有文件大小-而在另一行中输出printf结果-它包括文件大小)。

v6ylcynt

v6ylcynt1#

一种不太冗长的方法是使用递归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"
或者,在脚本中,您可以只打印每个文件的第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]"
3pmvbmvn

3pmvbmvn2#

查找. -名称 * 模式 *.gz -打印0|x字符-0 ls -lh
所以对于所有你想要的文件都得到ls。

相关问题