Shell实现归档文件
1、问题
实际生产应用中,往往需要对重要数据进行归档备份。
需求:实现一个每天对指定目录归档备份的脚本,输入一个目录名称(末尾不带/),将目录下所有文件按天归档保存,并将归档日期附加在归档文件名上,放在/rootlarchive下。
这里用到了归档命令:tar
后面可以加上-c选项表示归档,加上-z选项表示同时进行压缩,得到的文件后缀名为.tar.gz。
2、实现步骤
szy@szy:~/scripts$ vim daily_archive.sh
daily_archive.sh
#!/bin/bash
# 首先判断输入参数个数是否为1
if [ $# -ne 1 ]
then
echo "参数个数错误!应该输入一个参数,作为归档目录名"
exit
fi
# 从参数中获取目录名称
if [ -d $1 ]
then
echo
else
echo
echo "目录不存在!"
echo
exit
fi
DIR_NAME=$(basename $1)
DIR_PATH=$(cd $(dirname $1); pwd)
# 获取当前日期
DATE=$(date +%y%m%d)
# 定义生成的归档文件名称
FILE=archive_${DIR_NAME}_$DATE.tar.gz
DEST=/root/archive/$FILE
# 开始归档目录文件
echo "开始归档..."
echo
tar -czf $DEST $DIR_PATH/$DIR_NAME
if [ $? -eq 0 ]
then
echo
echo "归档成功!"
echo "归档文件为:$DEST"
echo
else
echo "归档出现问题!"
echo
fi
exit
开启可执行权限与执行
szy@szy:~/scripts$ chmod u+x daily_archive.sh
szy@szy:~/scripts$ sudo mkdir /root/archive
szy@szy:~/scripts$ sudo ./daily_archive.sh ../scripts
szy@szy:~/scripts$ sudo ls /root/archive
archive_scripts_221202.tar.gz
定时任务
szy@szy:~/scripts$ crontab -e
crontab: installing new crontab
0 2 * * * /root/scripts/daily_archive.sh /root/scripts