你知道如何自动创建备份文件吗?

时间:2014-02-11 10:44:31

标签: linux shell tar

我使用命令tar -cpvzf ~/Backup/backup_file_name.tar.gz directory_to_backup/在Ubuntu / Linux上每天备份几次文件。我想创建一个自动创建文件名的脚本 - 检查:

~/Backup/backup_file_name_`date +"%Y-%m-%d"`_a.tar.gz

如果存在,如果存在则将“_a”替换为“_b”,然后检查所有字母到z。创建不存在的第一个备份文件。如果存在z之前的所有文件,则将“_1”添加到文件名(使用“_z”)并检查所有数字,直到该文件不存在。永远不要更改现有文件,只创建新的备份文件。你知道如何创建这样的脚本吗?

3 个答案:

答案 0 :(得分:2)

您可以执行类似

的操作
for l in {a..z} ; do
    [[ -f ~/Backup/backup_file_name_`date +"%Y-%m-%d"`_${l}.tar.gz ]] && continue
    export backupname=-f ~/Backup/backup_file_name_`date +"%Y-%m-%d"`_${l}.tar.gz && break
done

# test if $backupname is properly set, what if `z` is used? I'm leaving this to you
# then backup as usual

tar -cpvzf $backupname directory_to_backup/

这会迭代字母,如果所需文件存在,则跳过设置backupname变量。

答案 1 :(得分:0)

好的,我找到了解决方案。我创建了文件~/scripts/backup.sh

#!/bin/bash

working_dir=`pwd`
backupname=""

if [ -z "$backupname" ]; then
    for l in {a..z} ; do
    if [ ! -f ~/Backup/backup_file_name_`date +"%Y-%m-%d"`_${l}.tar.gz ]; then
        backupname=~/Backup/backup_file_name_`date +"%Y-%m-%d"`_${l}.tar.gz
        break
    fi
    done
fi

if [ -z "$backupname" ]; then
    l="z"
    for (( i = 1 ; i <= 1000; i++ )) do
    if [ ! -f ~/Backup/backup_file_name_`date +"%Y-%m-%d"`_${l}_${i}.tar.gz ]; then
        backupname=~/Backup/backup_file_name_`date +"%Y-%m-%d"`_${l}_${i}.tar.gz
        break
    fi
    done
fi

if [ ! -z "$backupname" ]; then
    cd ~/projects/
    ~/scripts/tar.sh $backupname directory_to_backup/
    cd $working_dir
else
    echo "Oops! can't create backup file name."
fi

exit

文件~/scripts/tar.sh包含以下脚本:

#!/bin/bash

if [ -f $1 ]; then
    echo "Oops! backup file was already here."
    exit
fi
tar -cpvzf $1 $2 $3 $4 $5

现在我只需输入~/scripts/backup.sh,脚本就会备份我的文件。

答案 2 :(得分:-1)

创建一个脚本,用于保存日期文件,如

〜/备份/ backup_file_name _ $ {日期}名为.tar.gz

如果您希望在某个特定时间间隔后进行备份,则运行该脚本作为cron作业;如果您没有这样的要求,则手动运行该脚本。