我需要使用 3 个不同目录中的 cron 作业删除超过 3 天的文件。(这 3 个目录是父目录/a/b/c/1& /a/b/c/2& 的子目录/a/b/c/3)可以用 crontab 中的一行来完成吗?
我想递归删除文件夹中一段时间内未访问的a所有文件,子文件夹中的所有文件除外b。
find a \( -name b -prune \) -o -type f -delete
Run Code Online (Sandbox Code Playgroud)
但是,我收到一条错误消息:
find: -delete 操作会自动打开 -depth,但 -prune 在 -depth 生效时什么也不做。如果您想继续,只需明确使用 -depth 选项。
添加-depth会导致b包含所有文件,这绝不能发生。
任何人都知道一种安全的方法来使这项工作?
GNU 的手册页find明确警告使用-delete意味着-depth. 但是,我找不到对此要求的任何解释:
\n\n\n
-delete删除文件; 如果删除成功则为 true。如果删除失败,则会发出错误消息。[\xe2\x80\xa6] 使用-delete自动打开该-depth选项。
find --version\nfind (GNU findutils) 4.8.0\nRun Code Online (Sandbox Code Playgroud)\n这隐式是后序行走:
\nfind /path -type f -delete\nRun Code Online (Sandbox Code Playgroud)\n但这是预序遍历,是 的常用遍历方法find:
find /path -type f -exec rm -f {} +\nRun Code Online (Sandbox Code Playgroud)\n如果我想用-prune我就不能用-delete,而必须使用更麻烦的-exec rm {} +,但最终效果似乎是一样的。
该-delete操作不会删除目录,那么为什么find -delete需要暗示呢-depth?