我有一个文件夹/data
,里面有很多文件夹。我想在创建 30 天后删除这些目录的内容,但不删除目录本身。
所以我的路径将是/data/dirname/files
或/data/dirname/anotherdir/files
。
第一个目录名需要保存,因为它是通过 FTP 共享的。
当脚本或命令完成时,我猜 crontabbing 是个好主意,对吧?
我该如何做呢?
答案1
\data
你可以使用以下方式递归列出最后修改时间为 30 天前的所有常规文件:
find /data -type f -mtime +30 -ls
但你必须注意,这mtime
不一定是创建时间。我认为不可能检查创建时间。你只需要ctime
和atime
来mtime
检查。
如果你想删除这些文件,你可以调用类似的命令
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 文件,日期大部分会是过去的日期,导致文件在一天后消失。不过,空目录会立即被删除。