【问题标题】:Find all files, then grep all files for those names查找所有文件,然后对这些名称的所有文件进行 grep
【发布时间】:2012-12-20 07:13:35
【问题描述】:

我想在一个目录上运行一个命令来打印该目录中的所有文件,然后grep所有文件递归地查找那些找到的文件名,基本上是检查并查看是否在任何PHP中使用了X文件或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 或找到在grep 中打印没有结果的那些。

【问题讨论】:

  • 在您的 exec 示例中,您的搜索目标是什么?
  • 尝试使用find ... | xargs grep -R

标签: command-line grep find


【解决方案1】:

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

$ 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 可能会帮助您。

【讨论】:

    【解决方案2】:

    使用-exec 调用basename 并通过管道传递给grep

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

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

    【讨论】:

      猜你喜欢
      • 2021-11-16
      • 2020-08-10
      • 2012-02-07
      • 1970-01-01
      • 2021-04-25
      • 2020-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多