1. 程式人生 > >linux下用bash寫一個批量解壓指令碼

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!  該問題終於解決了!