我正在查找文件列表。

我如何将它输送到另一个实用程序,如cat,以便cat显示所有这些文件的内容?

然后,我将使用grep来搜索这些文件中的一些文本。


当前回答

对我来说,听起来像是shell脚本的工作:

for file in 'find -name *.xml'
do
   grep 'hello' file
done

或者类似的东西

其他回答

对我来说,听起来像是shell脚本的工作:

for file in 'find -name *.xml'
do
   grep 'hello' file
done

或者类似的东西

为了实现这一点(使用bash),我将这样做:

cat $(find . -name '*.foo')

这就是所谓的“命令替换”,它在默认情况下去掉换行,这真的很方便!

更多信息请点击这里

我使用的方法是这样的:

find . -name <filename> -print0 | xargs -0 cat | grep <word2search4>

"find"的"-print0"参数和"xargs"的"-0"参数需要正确处理文件路径/名称中的空白。

在bash中,以下代码是合适的:

find /dir -type f -print0 | xargs -0i cat {} | grep whatever

这将找到/dir目录下的所有文件,并安全地将文件名输送到xargs中,xargs将安全地驱动grep。

如果你在/dir目录下有成千上万的文件,跳过xargs不是一个好主意;Cat将由于参数列表长度过大而中断。Xargs会帮你处理的。

-print0参数用于查找与xargs的-0参数相匹配,以正确处理带有空格的文件名。xargs的-i参数允许您在cat命令行中插入所需的文件名。括号被从find导入cat命令的文件名所取代。

这将只递归地打印文件的名称和内容。

find . -type f -printf '\n\n%p:\n' -exec cat {} \;

编辑(改进版): 这将只递归地打印文本(ascii)文件的名称和内容。

find . -type f -exec grep -Iq . {} \; -print | xargs awk 'FNR==1{print FILENAME ":" $0; }'

再试一次

find . -type f -exec grep -Iq . {} \; -printf "\n%p:" -exec cat {} \;