shell习题5
题:备份某个文件下所有txt文件,进行打包备份,还原操作
目录下创建10个文件
[root@localhost test]# ls file/
10.txt 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt
[root@localhost test]# ls
123_20211231100740 20211231100740.zip file
[root@localhost test]# cat bak.sh
#!/bin/bash
#判断当前文件下是否有file.tar.gz
file=`ls |grep file.tar.gz|wc -l`
#如果有file.tar.gz这个文件,则对文件进行重命名操作,没有则睡眠5s
if [ $file -eq 0 ];then
sleep 5
else
mv file.tar.gz date_file.tar.gz
fi
#查找/home/yy/test/file/ 文件下所有txt文件,把名字导入到list.txt文件
find /home/yy/test/file/ -type f -name '*.txt'|awk -F '/' '{print $6}' > list.txt
#首先对所有的list文件进行备份
for f in `cat list.txt`
do
mv file/$f file/$f.bak
done
#定义当前时间为变量date
date=`date +%Y%m%d%H%M%S`
#创建当前时间的变量为目录
mkdir ./123_$date
#把file下备份的txt文件,移动到以时间命名的目录下
for file in `cat list.txt`
do
mv file/$file.bak 123_$date
done
#对时间目录进行打包
tar -czf $date.tar.gz 123_$date
#删除时间目录,清理文件
rm -rf 123_$date
#解压文件
tar -zxf $date.tar.gz
#还原所有txt文件
for restore in `cat list.txt`
do
mv 123_$date/$restore.bak file/$restore
done