找到所有文件,然后grep这些名称的所有文件

时间:2012-12-19 22:09:13

标签: command-line grep find

我想在一个目录上运行一个命令来打印出该目录中的所有文件,然后递归grep所有找到文件名的文件,基本上检查并查看是否在任何{{{目录中的1}}或PHP个文件。如果发现X文件不在任何文件中,请打印它的名称。

到目前为止我有这个,我无法弄清楚如何传递给HTML我所拥有的东西然后打印那些没有结果的东西。

grep

我可以使用find . -path ./images -prune -o -name '*' -type f -print | sed 's!.*/!!'

exec

但是我不能find . -path ./images -prune -o -name '*' -type f -exec grep -R '{}' ./* \; 离开找到的文件名前面的sed

令我困惑的查询的另一部分是我无法弄清楚如何获取./dir/etc/或找到在grep中打印没有结果的那些。

2 个答案:

答案 0 :(得分:3)

我认为这样的事情可能有所帮助:

$ find . -type f -printf "%f\n" | grep --color -R -f - .

在此示例中,-printf "%f\n"导致find仅返回没有路径的文件名。结果是一个用作grep搜索模式的文件,并使用stdin作为-f -的输入传递。 -R告诉grep递归搜索(你已经知道)。 --color使事情变得美好。

仅列出匹配的文件名使用grep -l -R -f - .。然后要查找没有结果的文件,您必须找到不在该列表中的文件。

This post可能会帮助您。

答案 1 :(得分:1)

使用-exec来呼叫basename并管道转移到grep

find ./images -maxdepth 1 -type f -exec basename {} \; | grep ...

这将只打印./images中找到的所有文件的文件名。