删除目录中的旧文件,但不删除根目录中的旧文件

删除目录中的旧文件,但不删除根目录中的旧文件

我目前正在配置 crontab 以每小时删除显示的路径中的所有文件和目录。

我当前的解决方案是两行,所以我希望有人可以告诉我如何将其变成一行。目前,第二个命令complete也删除了该目录。我想保留该complete目录并只删除complete.

我究竟做错了什么?后面不应该有斜杠吗complete/*

要删除目录中超过 60 分钟的文件:

0 */1 * * * find /root/Downloads/complete/ -type f -mmin +60 -delete

要删除目录中超过 60 分钟的目录:

0 */1 * * * find /root/Downloads/complete/ -type d -mmin +60 -exec rm -r "{}" \;

答案1

你可能的意思是

0 */1 * * * find /root/Downloads/complete/* -type d -mmin +60 -exec rm -r "{}" \;

因为在您的示例中,find将匹配目录名称(及其下的所有内容),但使用通配符,shell 会将其扩展到目录下的所有内容(点名除外)。

答案2

仅使用这一行即可。

 0 */1 * * * find /root/Downloads/complete/ \( -type f -o -type d \) -mmin +60 -delete

/root/Downloads/complete/将仅删除自一小时前修改老化的路径下的文件和目录。

答案3

find /root/Downloads/complete/ -type d -mmin +60 -exec rm -r "{}" \;

如果目录本身一小时内没有修改,即使该目录或子目录中的文件最近已被修改,这也会删除目录及其所有内容。这可能不是您想要的。

目录的修改时间可能没那么有用。我建议您删除旧文件,然后删除目录,因为它们变空了。为了避免删除根目录,请传递-mindepth 1.

cd /root/Downloads/complete && find . -type f -mmin +60 -delete && find . -depth -mindepth 1 -type d -empty -delete

请注意,这可能会造成破坏,例如您可能会删除刚刚创建且另一个程序正在使用的目录。根据超时删除内容很少是一个好主意。如果您需要删除某些内容,则应该在文件处理到您满意的程度后进行,而不是在任意延迟之后进行。

相关内容