这只是好奇心的问题。我尝试了多种变种,并进行了研究,但似乎无法弄清楚这是否可行。
我想在find命令中执行find命令,如下所示:
find /some/dir -type d -exec find -type f -delete {} \;
因此,如果我们采用上面的示例,则第一个find命令查找特定文件夹中的目录,第二个find命令删除每个文件夹中的文件。
所以,简单地说,是否可以在bash中执行find命令中的find命令?另外,如果有的话,为什么这是一个坏主意。这不能用作递归查找文件的方法吗?
答案 0 :(得分:2)
原则上,您可以将find
命令作为执行-exec
的命令传递,就像您可以执行任何其他命令一样。它很少是一个好主意,但这是另一个讨论。
但是,如果两个find
命令都需要-exec
,则会出现语法问题。两个find
命令都需要一个标记来结束命令,;
或+
。即使你尝试混合最终标记,这也不会很好。第一个find命令将第一个结束标记解释为其结束标记,然后它将反对第二个结束标记。由于第二个find
命令未执行,因此忽略其结束标记无关紧要。
在您的命令中,{}
位于错误的位置:
find /some/dir -type d -exec find {} -type f -delete \;
这样可行(应该可行;我还没有测试过它 - 我喜欢我的文件!)。如果在目录级搜索中遇到诸如-mtime +365
之类的条件,那将更有意义;如果目录未被修改一年,请删除其中的文件。
但是,只要只有一个-exec
,您就可以从find
运行find
。