Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何使用;查找“;及;grep“;也要获取文件大小吗?_Linux_Unix_Command Line_Grep - Fatal编程技术网

Linux 如何使用;查找“;及;grep“;也要获取文件大小吗?

Linux 如何使用;查找“;及;grep“;也要获取文件大小吗?,linux,unix,command-line,grep,Linux,Unix,Command Line,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”(及其子目录)中搜索包含单词“.swf”的所有HTML文件。并将编写一个包含结果的CSV文件 但是我也希望在同一行中获得文件大小(现在,脚本在一行中输

我有这个剧本:

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结果-包括文件大小)。
如何向grep添加一个选项以获取文件大小?

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

说明:

  • Grep递归地使用“rl”标志
  • 包括文件模式“*.htm”
  • 在每个htm*文件中搜索字符串“.swf”
  • 仅在“测试”目录下搜索
  • 通过管道将结果传输到xargs,其中每个文件名都成为“ls-l”命令的参数
  • 然后使用awk仅获取文件名和文件大小。在awk打印的第9列和第5列之间使用逗号“,”以获得csv输出
可以随意用“ls-lk”或“ls-lh”等人类可读的变体替换“ls-l”

或者,在脚本中,您可以只打印每个文件的第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]"

grep没有这样的功能。如果要通过删除两行之间的换行来合并每两行,请使用sednew-known命令。不知道如何在我的示例中使用它…但我不想将这两行合并,我只想将文件大小添加到grep结果中。执行一个
bash
脚本,该脚本同时执行这两项操作并格式化结果。。。不确定如何使用bash:查找测试类型f(-iname*.html-o-iname*.htm-o-iname*.xhtml)-execbash-c'grep-il.swf“{}\;>result-swf-files.csv我试过了,脚本似乎永远都在运行……您是在查找html文件的文件大小还是swf文件的文件大小?
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]"