2017-08-16 35 views
0

我有以下情形: - 我的Zip文件= abcd.zip 內容: -解壓一個單一的「.ZIP」文件分成多個目錄,每包含在壓縮文件中的文件名 - Linux的

  1. A.TXT
  2. b.txt
  3. c.txt

現在我想解壓此zip文件夾到A/b /和c /。 (TXT文件可以是大寫或小寫)的

所以基本上我期待解壓縮文件到自己指定的目錄。

+0

你的zip文件不包含目錄?我的意思是它總是隻包含.txt文件? – Abis

+0

是的,它不包含任何目錄 –

回答

0
  1. 解壓縮歸檔到當前目錄。
  2. 執行以下命令:
    for i in `ls -1 *.txt | sed 's/\.[a-z]*//g'`; do mkdir $i; mv $i.* $i/; done
0

你可以嘗試如下,

將這個腳本在同一目錄中的zip文件,並通過壓縮文件名作爲參數傳遞給腳本。

#!/usr/bin/ksh 

name="$1" 

list="$(unzip -l "${name}" | sed -n '/---/,/---/{ /----/d; p; }' | awk '{print $4}')" 

for file in ${list} 
do 
    dirnam=$(basename "${file}" ".txt") 
    mkdir -p "${dirnam}" 
    unzip "${name}" -d "${dirnam}" "${file}" 
done 

例如:

/home/abis> ./unzip.sh test.zip 
Archive: test.zip 
extracting: 1/1.txt     
Archive: test.zip 
extracting: 2/2.txt     
Archive: test.zip 
extracting: 3/3.txt 
0

如果這一切都.TXT:
zipinfo -1 abc.zip | while read line;do mkdir -p ${line%.txt}; unzip abc.zip $line -d ${line%.txt};done

對於任何擴展(考慮到最後一個點作爲擴展後的所有內容):
zipinfo -1 abc.zip | while read line;do mkdir -p ${line%.*}; unzip abc.zip $line -d ${line%.*};done

對於一個擴展名列表:
zipinfo -1 abc.zip | while read line;do mkdir -p ${line%.?(txt|jpg|gif)}; unzip abc.zip $line -d ${line%.?(txt|jpg|gif)};done

最後一個選項需要extglob,默認情況下它是禁用的。這樣跑shopt extglob,看它是否開啓或關閉。 shopt -s extglob啓用和禁用shopt -u extglob

相關問題