我的服务器上有以下 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 文件。
有人可以帮我修改这个脚本吗?
谢谢
您可以检查结果是否正常,然后检查结果是否为空:
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
find /backups/www -type f -mtime -1 -exec tar uf /daily/backup-$today.tar {} +
使用-exec
优于xargs
. 不需要管道,它可以处理带有空格、换行符和其他不寻常字符的文件名,而无需额外的工作。最后{}
的 是文件名的占位符,并+
标记-exec
命令的结束(以防 有更多参数find
)。
作为奖励,如果没有找到文件,它将不会执行该命令。
一个相对简单的技巧是:
today=$(date +"%Y-%m-%d")
touch /backups/www/.timestamp
find /backups/www -type f -mtime -1|xargs tar uf /daily/backup-$today.tar
这样,您就可以保证始终找到至少一个文件(并且它的大小最小)。
xargs -r
如果没有输入,则什么也不做。