【发布时间】:2017-04-18 13:59:23
【问题描述】:
我目前正在编写一个脚本来存储/备份我们的旧文件,以便我们在服务器上有更多空间。这个脚本将被用作一个 cronjob 来每周备份这些东西。我的脚本目前如下所示:
#!/bin/bash
currentDate=$(date '+%Y%m%d%T' | sed -e 's/://g')
find /Directory1/ -type f -mtime +90 | xargs tar cvf - | gzip > /Directory2/Backup$currentDate.tar.gz
find /Directory1/ -type f -mtime +90 -exec rm {} \;
脚本首先将当前日期 + 时间戳(不带“:”)保存为变量。之后,它会搜索超过 90 天的文件,对它们进行 tar 处理,最后将它们制成一个 gzip,其名称为“Backup$currentDate.tar.gz”。 然后它应该再次找到文件并删除它们。
但是我确实有一些问题:
Directory1 由多个目录组成。它确实会找到文件并创建 gz 文件,但是虽然某些文件已正确压缩(例如 /DirName1/DirName2/DirName3/File),但其他文件则直接出现在“根”目录中。这可能是什么问题?
如果找到文件,有没有办法告诉脚本只创建 gz 文件?因为目前我们得到的是 gz 文件,即使没有找到,也会导致目录为空。
我可以稍后以某种方式使用查找输出(存储变量?),以便最后的删除真的只针对在前一步中找到的那些文件吗?因为如果第三步需要,假设一个小时,最后一步在完成后执行,它可能会删除不早于 90 天但现在的文件,因此它们永远不会备份,但是然后删除(极不可能,但并非不可能)。
如果你还有什么想知道的,欢迎询问^^
最好的问候
【问题讨论】:
-
你有 GNU Tar 吗?它会为你完成大部分工作。 gnu.org/software/tar/manual
-
遗憾的是我没有也不允许安装它。
-
这是 AIX 吗?什么版本? unname -a
-
AIX 7.1(7100-04-01-1543)
-
没有人解决这个问题吗?