linux下用bash寫一個批量解壓指令碼
阿新 • • 發佈:2018-12-27
在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! 該問題終於解決了!