Bash 脚本用于删除子目录树中超过 x 天的文件

Bash 脚本用于删除子目录树中超过 x 天的文件

我有一个文件夹/data,里面有很多文件夹。我想在创建 30 天后删除这些目录的内容,但不删除目录本身。

所以我的路径将是/data/dirname/files/data/dirname/anotherdir/files

第一个目录名需要保存,因为它是通过 FTP 共享的。

当脚本或命令完成时,我猜 crontabbing 是个好主意,对吧?

我该如何做呢?

答案1

\data你可以使用以下方式递归列出最后修改时间为 30 天前的所有常规文件:

find /data -type f -mtime +30 -ls

但你必须注意,这mtime不一定是创建时间。我认为不可能检查创建时间。你只需要ctimeatimemtime检查。

如果你想删除这些文件,你可以调用类似的命令

find /data -type f -mtime +30 -delete

当然您可以将这个命令添加到您的crontab文件中。

答案2

这是我的建议:

find /data -type f -a -ctime +30 -print0 | xargs --no-run-if-empty -0 rm -f

find /data -type l -a -ctime +30 -print0 | xargs --no-run-if-empty -0 rm -f

find /data -type d -mindepth 1 -print0 | xargs --no-run-if-empty -0 rmdir --ignore-fail-on-non-empty

它有点复杂,但它可以清理文件、符号链接和空目录。 --no-run-if-empty、-f 和 --ignore-fail-on-non-empty 选项可在无法清理某些内容时阻止来自 cronjob 的邮件。

我使用的是 ctime;使用 mtime 的缺点是,如果您解压 zip 或 tar 文件,日期大部分会是过去的日期,导致文件在一天后消失。不过,空目录会立即被删除。

相关内容