我想在一个目录上运行一个命令来打印该目录中的所有文件,然后递归地grep
所有文件查找找到的文件名,基本上是为了检查并查看X文件是否用于目录中的任何 PHP
或 HTML
文件。如果发现 X 文件不在任何文件中,则打印它的名称。
到目前为止,我不知道如何将我所拥有的内容传递给 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
删除 find 给我的文件名前面的 ./dir/etc/
。
令我困惑的查询的另一部分是我不知道如何获取 grep
或 find 打印那些在 grep
中没有结果的内容。
最佳答案
我认为这样的事情可能会有所帮助:
$ find . -type f -printf "%f\n" | grep --color -R -f - .
在此示例中,-printf "%f\n"
导致 find
仅返回文件名,而不返回路径。结果是一个用作 grep 搜索模式的文件,并使用 -f -
作为 stdin
上的输入传递。 -R
告诉 grep 递归搜索(您已经知道)。 --color
让事情看起来很漂亮。
要仅列出匹配的文件名,请使用grep -l -R -f - .
。然后,要查找没有结果的文件,您必须查找不在该列表中的文件。
This post可能会帮助你。
关于command-line - 查找所有文件,然后 grep 查找这些名称的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13962105/