【问题标题】:Is it possible to pass a find command to -exec of another find command?是否可以将 find 命令传递给另一个 find 命令的 -exec?
【发布时间】:2015-02-17 18:35:16
【问题描述】:

这只是一个好奇的问题。我尝试了多种变体,并进行了研究,但似乎无法弄清楚这是否可能。

我想在 find 命令中执行 find 命令,如下所示:

find /some/dir -type d -exec find -type f -delete {} \;

因此,如果我们以上面的示例为例,第一个 find 命令在特定文件夹中查找目录,第二个 find 命令删除每个文件夹中的文件。

那么,简单地说,在 bash 中是否可以在 find 命令中执行 find 命令?另外,如果有的话,为什么这是一个坏主意。这不能用作递归查找文件的方法吗?

【问题讨论】:

    标签: bash find


    【解决方案1】:

    原则上,您可以传递一个find 命令作为要为-exec 执行的命令,就像您可以传递任何其他命令一样。这很少是一个好主意,但这是另一个讨论。

    但是,如果两个find 命令都需要-exec,则会出现语法问题。两个find 命令都需要一个标记来结束命令,;+。即使您尝试混合结束标记,这也不会很好。第一个 find 命令会将第一个结束标记解释为其结束标记,然后它将反对第二个结束标记。由于第二个find 命令没有被执行,所以它的结束标记丢失并不重要。

    在您的命令中,您将 {} 放在错误的位置:

    find /some/dir -type d -exec find {} -type f -delete \;
    

    这会起作用(应该会起作用;我还没有测试过——我喜欢我的文件!)。如果您在目录级搜索中有-mtime +365 之类的条件会更有意义;如果一个目录一年没有修改,删除里面的文件。

    但是,只要只有一个-exec,您应该可以从find 运行find

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-07
      • 1970-01-01
      • 2013-01-13
      • 2018-09-13
      • 1970-01-01
      • 2012-02-04
      • 1970-01-01
      相关资源
      最近更新 更多