linux下用bash写一个批量解压脚本

在linux下进行学习时,发现有一个学习资源文件夹下含有大量的rar格式压缩包,便想着利用bash shell 写一个脚本来一次性解压所有的压缩包.

首先测试该段代码能否正常判断每个文件夹下rar文件是否存在:

#循环遍历部分
i=1
#[ ]与内部字符间应该有空格
while [ $i -lt 25 ]
do
#-f 参数 判断文件夹下的文件是否存在
  file="/home/yang/Downloads/php_resource/day${i}/day${i}.rar"
    if [ -f "$file" ]
  # if [ $i -lt 24 ]
     then
         #unrar x /home/yang/Downloads/php_resource/day${i}/day${i}.rar
         echo "$file"
   fi
let "i++"
done

测试结果如下:

看到这个结果我发现有的文件夹中rar文件已解压,这是再解压就要求unrar解压中参数包含覆盖功能.

在终端内: man unrar:

另一种解决方法是对是否已存在该目录进行判断:

#循环遍历部分
i=1
#[ ]与内部字符间应该有空格
while [ $i -le 25 ]
do
#-f 参数 判断文件夹下的文件是否存在
  file="/home/yang/Downloads/php_resource/day${i}/day${i}.rar"
  filedir="/home/yang/Downloads/php_resource/day${i}/day${i}/"
    if [[ -f "$file" && ! -d "$filedir" ]]
  # if [ $i -lt 24 ]
     then
         #unrar x -o+ /home/yang/Downloads/php_resource/day${i}/day${i}.rar
         echo "$file"
   fi
let "i++"
done

删除注释,开启unrar解压命令:

但是发生了一件不幸的事,每个文件夹的文件没有解压到单独文件夹:
 

于是,便需要先删除它们然后再修改解压命令:

#循环遍历部分
i=1
#[ ]与内部字符间应该有空格
while [ $i -le 25 ]
do
#-f 参数 判断文件夹下的文件是否存在
  file="/home/yang/Downloads/php_resource/day${i}/day${i}.rar"
  filedir="/home/yang/Downloads/php_resource/day${i}/day${i}/"
  filedir2="/home/yang/Downloads/php_resource/day${i}/"

    if [[ -f "$file" && ! -d "$filedir" ]]
  # if [ $i -lt 24 ]
     then
       cd $filedir2
       ls | grep -v "rar"
       #用于删除非rar目录及文件
       #rm -f `ls | grep -v "rar"`
       #rm -r `ls | grep -v "rar"`
       unrar x -o+ /home/yang/Downloads/php_resource/day${i}/day${i}.rar /home/yang/Downloads/php_resource/day${i}/
   fi
let "i++"
done

OK!    PEFECT!  该问题终于解决了!

猜你喜欢

转载自blog.csdn.net/qq_36546956/article/details/85276351
今日推荐