最近有一个业务需求,是要将服务器上指定目录的文件每天进行保存,并将文件保存在/root目录下,所以考虑使用shell完成此功能
因为需要被归档文件的目录是根据业务需求调整的,所以执行shell脚本的时候,应该将这个目录名称作为参数传入,也只有这一个参数,在此文档里假设为/root/linux_project,可以通过以下脚本实现此部分功能,并将脚本命名为archive.sh
#!/bin/bash
#首先判断输入的参数个数是否为1个
if [ $# != 1 ]
then
echo "参数个数不为1,应该只输入1个参数,是需要被归档文件的目录名"
exit
fi
我们可以先不加参数,直接执行sh archive.sh,就会显示
参数个数不为1,应该只输入1个参数,是需要被归档文件的目录名
添加1个参数后,则会正常执行sh archive.sh /root/linux_project
需要对入参的属性进行判断,只有目录才可以做下一步的操作
if [ -d $1 ] #判断参数是否为文件夹
then
echo "参数是目录,符合要求"
else
echo "参数不是目录,不符合要求"
exit
fi
并通过以下两句获取目录的路径
DIRNAME=$(basename $1)
DIR_PATH=$(cd $(dirname $1); pwd) #此处是为了取绝对路径
因为需要每天归档,所以需要将当前日期作为后缀放在路径下
这一步只需要一句DATE=$(date +%Y%m%d)就可以实现
# 定义生成的归档文件名称
FILE=archive_${DIR_NAME}_$DATE.tar.gz
DEST=/root/$FILE
# 开始归档目录文件
echo "开始归档..."
echo
tar -czf $DEST $DIR_PATH/$DIR_NAME
if [ $? -eq 0 ]
then
echo "归档成功!"
echo "归档文件为:$DEST"
else
echo "归档出现问题!"
fi
exit
完整代码如下
#!/bin/bash
#首先判断输入的参数个数是否为1个
if [ $# != 1 ]
then
echo "参数个数不为1,应该只输入1个参数,是需要被归档文件的目录名"
exit
fi
#从输入参数里获取目录名称
if [ -d $1 ] #判断参数是否为文件夹
then
echo "参数是目录,符合要求"
else
echo "参数不是目录,不符合要求"
exit
fi
DIRNAME=$(basename $1)
DIR_PATH=$(cd $(dirname $1); pwd) #此处是为了取绝对路径
# 获取当前日期
DATE=$(date +%Y%m%d)
# 定义生成的归档文件名称
FILE=archive_${DIR_NAME}_$DATE.tar.gz
DEST=/root/$FILE
# 开始归档目录文件
echo "开始归档..."
echo
tar -czf $DEST $DIR_PATH/$DIR_NAME
if [ $? -eq 0 ]
then
echo "归档成功!"
echo "归档文件为:$DEST"
else
echo "归档出现问题!"
fi
exit