我正在查找文件列表。
我如何将它输送到另一个实用程序,如cat,以便cat显示所有这些文件的内容?
然后,我将使用grep来搜索这些文件中的一些文本。
我正在查找文件列表。
我如何将它输送到另一个实用程序,如cat,以便cat显示所有这些文件的内容?
然后,我将使用grep来搜索这些文件中的一些文本。
当前回答
这对我很有用
find _CACHE_* | while read line; do
cat "$line" | grep "something"
done
其他回答
列出并查看服务器上/ghi和/jkl目录下所有abc.def文件的内容
find /ghi /jkl -type f -name abc.def 2> /dev/null -exec ls {} \; -exec cat {} \;
要列出带有注释条目的abc.def文件并显示,请查看目录/ghi和/jkl中的这些条目
find /ghi /jkl -type f -name abc.def 2> /dev/null -exec grep -H ^# {} \;
为了实现这一点(使用bash),我将这样做:
cat $(find . -name '*.foo')
这就是所谓的“命令替换”,它在默认情况下去掉换行,这真的很方便!
更多信息请点击这里
现代版
POSIX 2008添加了+标记来查找,这意味着它现在自动将尽可能多的文件分组到单个命令执行中,非常像xargs,但有一些优点:
您不必担心文件名中的奇数字符。 您不必担心使用零文件名调用命令。
文件名问题是在没有-0选项的xargs中出现的,“即使没有文件名也运行”问题是在没有-0选项的情况下出现的,但是GNU xargs有-r或——no-run-if-empty选项来防止这种情况发生。此外,这种表示法减少了进程的数量,并不是说您可能会度量性能上的差异。因此,你可以这样写:
find . -exec grep something {} +
经典的版本
find . -print | xargs grep something
如果您使用的是Linux,或者有GNU的find和xargs命令,那么使用-print0和find一起使用,-0和xargs一起使用来处理包含空格和其他奇怪字符的文件名。
find . -print0 | xargs -0 grep something
从grep调整结果
如果你不想要文件名(只是文本),那么在grep中添加一个适当的选项(通常是-h来抑制“标题”)。为了绝对保证grep打印文件名(即使只找到一个文件,或者最后一次调用grep只给出了一个文件名),然后在xargs命令行中添加/dev/null,这样至少会有两个文件名。
以下是我的常用镜头:
grep YOURSTRING `find .`
它将打印文件名
在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命令的文件名所取代。