我使用命令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”)并检查所有数字,直到该文件不存在。永远不要更改现有文件,只创建新的备份文件。你知道如何创建这样的脚本吗?
答案 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作业;如果您没有这样的要求,则手动运行该脚本。