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
红色为修改部分