2

我的服务器上有以下 bash 脚本:

today=$(date +"%Y-%m-%d")
find /backups/www -type f -mtime -1|xargs tar uf /daily/backup-$today.tar

如您所见,它会创建过去 24 小时内修改/创建的文件的备份。但是,如果没有找到文件,它会创建损坏的 tar 文件。我想将它包装在 if..fi 语句中,这样 id 就不会创建空/损坏的 tar 文件。

有人可以帮我修改这个脚本吗?

谢谢

4

4 回答 4

7

您可以检查结果是否正常,然后检查结果是否为空:

   today=$(date +"%Y-%m-%d")
   results=`find /backups/www -type f -mtime -1`


    if [[ 0 == $? ]] ; then
     if [[ -z $results ]] ; then
      echo "No files found"
     else
      tar uf /daily/backup-$today.tar $results
     fi
    else
     echo "Search failed"
    fi
于 2012-12-12T14:29:19.310 回答
2
find /backups/www -type f -mtime -1 -exec tar uf /daily/backup-$today.tar {} +

使用-exec优于xargs. 不需要管道,它可以处理带有空格、换行符和其他不寻常字符的文件名,而无需额外的工作。最后{}的 是文件名的占位符,并+标记-exec命令的结束(以防 有更多参数find)。

作为奖励,如果没有找到文件,它将不会执行该命令。

于 2012-12-12T14:04:45.197 回答
0

一个相对简单的技巧是:

today=$(date +"%Y-%m-%d")
touch /backups/www/.timestamp
find /backups/www -type f -mtime -1|xargs tar uf /daily/backup-$today.tar

这样,您就可以保证始终找到至少一个文件(并且它的大小最小)。

于 2012-12-12T15:57:33.373 回答
0

xargs -r如果没有输入,则什么也不做。

于 2012-12-12T17:28:32.033 回答