我目前正在编写一个脚本,用于存储/备份旧文件,以便我们的服务器上有更多空间。这个脚本将用作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天的文件,对它们进行焦化,最后制作一个gzip,其名称为" Backup $ currentDate.tar.gz"。 然后它应该再次找到文件并删除它们。
但我确实有一些问题:
Directory1由多个目录组成。它确实找到了文件并创建了gz文件,但是有些文件正确压缩(例如/ DirName1 / DirName2 / DirName3 / File),其他文件直接出现在" root"迪尔。这可能是什么问题?
有没有办法告诉脚本,只创建gz文件,如果找到文件?因为目前我们得到gz文件,即使没有找到任何内容,也会导致空目录。
我可以稍后使用查找输出(存储变量吗?),以便最后的删除实际上只针对之前步骤中找到的那些文件?因为如果第三步需要,让我们说一个小时,最后一步在完成之后执行,它可能会删除文件,这些文件不会超过90天,但是现在,所以他们永远不会备份,但随后被删除(非常不喜欢,但并非不可能)。
如果您需要了解其他任何内容,请随时询问^^
祝你好运
答案 0 :(得分:0)
我已经改编了"你的原始代码有点。我没有AIX机器来测试任何东西,所以不要剪切和粘贴它。使用此代码,您应该能够解决您的问题。即:
$BFILES
)。小时候,我和xargs发生了严重的意外,从那时起就一直避免。也许有一个安全的版本。
#!/bin/bash
# I don't have an AIX machine to test this, so exit immediately until
# someone can proof this code.
exit 1
currentDate=$(date '+%Y%m%d%T' | sed -e 's/://g')
BFILES=/tmp/Backup$currentDate.files
find /Directory1 -type f -mtime +90 -print > $BFILES
# Here is the time to proofread the file list, $BFILES
# The AIX page I read lists the '-L' option to take filenames from an
# input file. I've found xargs to be sketchy unless you are very
# careful about quoting.
#tar -c -v -L $BFILES -f - | gzip -9 > /Directory2/Backup$currentDate.tar.gz
# I've found xargs to be sketchy unless you are very careful about
# quoting. I would rather loop over the input file one well quoted
# line at a time rather than use the faster, less safe xargs. But
# here it is.
#xargs rm < $BFILES