在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! 该问题终于解决了!