哪个“find”命令会删除目录中除 CVS 文件夹之外的所有内容?

哪个“find”命令会删除目录中除 CVS 文件夹之外的所有内容?

我有一个目录:

$ tree
.
|-- CVS
|   |-- Entries
|   |-- Entries.Log
|   |-- Repository
|   `-- Root
|-- dirA
|   |-- CVS
|   |   |-- Entries
|   |   |-- Repository
|   |   `-- Root
|   |-- file1
|   `-- file2
|-- dirB
|   |-- CVS
|   |   |-- Entries
|   |   |-- Repository
|   |   `-- Root
|   |-- file3
|   `-- file4
|-- file5
`-- file6

我可以使用以下命令找到我想要删除的所有文件:

$ find . -name CVS -prune -o -type f -print

但如果我-print改为-delete

$ find . -name CVS -prune -o -type f -delete

一切都消失了。为什么?

答案1

查看 的手册页find,位于-delete

在测试稍后打算与 -delete 一起使用的 find 命令行时,应明确指定 -depth 以避免以后出现意外。由于 -delete 隐含 -depth,因此不能同时使用 -prune 和 -delete。

在这种情况下,您很可能只需使用-exec rm {} +而不是-delete来做您想做的事情,但就像玩火时一样:非常在努力之前确保它能正常工作。

相关内容