是否可以将find命令传递给另一个find命令的-exec?

时间:2014-12-18 21:01:46

标签: bash find

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

但是,如果两个find命令都需要-exec,则会出现语法问题。两个find命令都需要一个标记来结束命令,;+。即使你尝试混合最终标记,这也不会很好。第一个find命令将第一个结束标记解释为其结束标记,然后它将反对第二个结束标记。由于第二个find命令未执行,因此忽略其结束标记无关紧要。

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

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

这样可行(应该可行;我还没有测试过它 - 我喜欢我的文件!)。如果在目录级搜索中遇到诸如-mtime +365之类的条件,那将更有意义;如果目录未被修改一年,请删除其中的文件。

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