find的脚本问题 - >焦油/ gzip的

时间:2017-04-18 13:59:23

标签: unix find gzip tar

我目前正在编写一个脚本,用于存储/备份旧文件,以便我们的服务器上有更多空间。这个脚本将用作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天,但是现在,所以他们永远不会备份,但随后被删除(非常不喜欢,但并非不可能)。

如果您需要了解其他任何内容,请随时询问^^

祝你好运

1 个答案:

答案 0 :(得分:0)

我已经改编了"你的原始代码有点。我没有AIX机器来测试任何东西,所以不要剪切和粘贴它。使用此代码,您应该能够解决您的问题。即:

  • 它记录了它打算操作的文件($BFILES)。
  • 此记录可用于检查空的tar文件。
  • 此记录可用于查看您的查找产生的原因"有趣"输出。我发现xargs击中了一个太空角色并不会让我感到惊讶。
  • 此记录可用于准确删除已归档的文件。

小时候,我和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