解读shell之备份文件自动备份、恢复

 

 

1:上传时,文件备份按其原来的目录结构,备份到其他目录下面($bakdir)

 



#!/bin/sh
#定义目录:bakdir备份文件的目录  zipfiledir是zip打包的目录 rootdir 上传的根目录, upload解包目录

bakdir='/root/b/'

zipfiledir='/root/zip/'

upload='/root/upzip/'

rootdir='/root/a/'
tmpdir='/root'


datetime=`date +%Y%m%d%H%M` #定义输出时间格式
dateroll=`date +%Y%m%d`

zipfile1=$1
zipfile=`echo ${zipfile1%.zip}`
function  ccopy()
{
echo " enter y|Y to confirm "
read confirmd
case $confirmd in
y|Y)

cd $upload
if [[  -d $zipfile ]]
then
rm -rf $zipfile
mkdir $zipfile
else
mkdir $zipfile
fi
uprealdir=$upload$zipfile'/'
cd $uprealdir
unzip $zipfiledir$zipfile
find ./ -name '*' >$tmpdir/filedir
cp $tmpdir/filedir $tmpdir/souredir
sed -i 's//.g' $tmpdir/souredir
filenum=`wc -l $tmpdir/filedir|awk '{print $1}'`
i=1
while [[ "$i"  -le "$filenum" ]];
do
sourename=`sed -n "$i"p $tmpdir/souredir`
#备份文件夹下面有没有这个上传文件的目录,没有的话,就新建目录
if [[ -f $rootdir$sourename ]]
then
huozui=`dirname $sourename`
if [[ ! -d $bakdir$huozui ]]
then
mkdir -p  $bakdir$huozui
fi
#移动文件到备份目录
#mv $rootdir$sourename $rootdir$sourename$datetime$zipfile
mv $rootdir$sourename $bakdir$sourename$datetime$zipfile.bak
cp $uprealdir$sourename $rootdir$sourename
echo "$rootdir$sourename success"

#如果文件或目录不存在的时候
elif  [[ ! -e $rootdir$sourename ]]
then
#如果是目录则新建目录
if [[ -d $uprealdir$sourename ]]
then
mkdir -p $rootdir$sourename
echo $rootdir$sourename directory create""
#如果不是目录,因为在上面已经新建目录了。则只需copy就可以
else
cp $uprealdir$sourename $rootdir$sourename
echo "$rootdir$sourename success"
fi
else
echo ""
fi
i=$(($i+1))
done
;;
*)
echo "No action"
;;
esac
}
function croll()
{
echo " enter y|Y to confirm "
read confirmd
case $confirmd in
y|Y)

uprealdir=$upload$zipfile'/'
cd $uprealdir
find ./ -name '*' >$tmpdir/filedir
cp $tmpdir/filedir $tmpdir/souredir
sed -i 's//.g' $tmpdir/souredir
filenum=`wc -l $tmpdir/souredir|awk '{print $1}'`
i=1
while [[ "$i"  -le "$filenum" ]];
do
sourename=`sed -n "$i"p $tmpdir/souredir`
lastname=`sed -n "$i"p $tmpdir/souredir|awk -F / '{print $NF}'`
if [[ -f $rootdir$sourename ]]
then
currdir=`dirname $bakdir$sourename`
if [[ -d $currdir ]]
then
cd $currdir
else
currdir=`dirname $rootdir$sourename`
cd $currdir
fi

#ffstat 代表需要恢复文件的备份文件的个数 1:为一个备份。0:说明没有,该上传文件是新文件
ffstat=`find ./ -name "$lastname*$zipfile*"|wc -l`
if [[ "$ffstat" == 1 ]]
then
#newbakname=`ls $rootdir$sourename*$zipfile`
newbakname=`ls $bakdir$sourename*$zipfile*`
echo " start roll $rootdir$sourename"
rm -f $rootdir$sourename
mv $newbakname $rootdir$sourename
echo "$rootdir$sourename success"
elif [[ "$ffstat" == 0 ]]
then
filestat=`ls $rootdir$sourename*|wc -l`
if [[ "$filestat" == 1 ]]
then
echo "$rootdir$sourename is new file "
rm -f $rootdir$sourename
echo "$rootdir$sourename roll success"
else "$rootdir$sourename error"
fi
else "$rootdir$sourename error"
fi
fi
i=$(($i+1))
done
;;
*)
echo "No action"
;;
esac
}
case "$2" in
upload)
ccopy
;;
roll)
croll
;;
*)
echo $"Usage: $upload zipfile {upload|roll}"
exit 1
esac
红色为修改部分

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值