在/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
答案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 系统)上的脚本调度程序。
这应该可以让你开始了!