压缩超过 x 天的文件夹

压缩超过 x 天的文件夹

/opt/abc我的路径中,每天都会创建一个新文件夹。在该文件夹中会创建一系列文件。

我想每周日凌晨 2 点运行一个脚本,并压缩每个超过 2 天的文件夹。我不希望将所有内容压缩到一个文件夹中,而是将每个文件夹单独压缩。如果压缩成功,则可以删除原始文件夹。

我试图创建一个脚本,但它所做的只是将它们压缩为一个文件。而且它不会删除原始文件夹。

我该如何继续?

答案1

此命令应可完成此项工作,因此只需将其输入到您的 crontab 中即可:

find /opt/abc/* -maxdepth 0 -mtime +2 ! -name '*.tar.gz' -exec tar czf {}.tar.gz {} \; -exec rm -rf {} \;

我还没有彻底地测试过它,但我确信它不会意外删除东西。

但是,如果存档与 之前的相关目录同名,它将删除存档,.tar.gz因为如果给出了创建开关,GNU tar 将覆盖存档c。如果您将存档存档到另一个目录中,则更安全:

find /opt/abc/* -maxdepth 0 -mtime +2 ! -name '*.tar.gz' -exec tar czf /opt/abcompressed/{}.tar.gz {} \; -exec rm -rf {} \;

此外,档案将包含目录结构/opt/abc/<dirname>/<files>,我目前还无法解决这个问题。

答案2

您可以使用参数-n 1 仅将单个文件参数导入压缩命令。

注意空格。

答案3

find /path/to/directory -mtime +2 -exec ls "{}" \;

这是一个有用的代码片段,用于列出超过 2 天的文件,尽管它只计算整天,并且其中有一个四舍五入的元素,因此使用带有选项的分钟-mmin可能会更好。我还看到有人用替换-exec并将print0输出通过管道传输到xargs,这样可以更好地处理不寻常的文件名echo。您还可以指定要查找的文件类型find,使其仅查找目录,我认为这是-type选项

您可以ls用其他命令替换命令中的 ,我经常使用 ls 来确保我对输出感到满意,然后mv /path/to/target在删除超过一定时间的文件时将其替换为 。我想您可以使用命令tar代替 来ls实现所需的压缩。

您可以编写脚本,并将该脚本作为cron作业调用,cron这是 Ubuntu(和其他 Linux 系统)上的脚本调度程序。

这应该可以让你开始了!

相关内容