[英]Unzip a single “.zip” file into multiple directories as per the name of the files contained in zip file - Linux
我有以下情況:-我的Zip文件= abcd.zip其內容:-
現在,我想將此壓縮文件解壓縮到文件夾a /,b /和c /。 (TXT文件可以是大寫或小寫)
因此,基本上,我希望將文件解壓縮到其自己的指定目錄中。
for i in `ls -1 *.txt | sed 's/\\.[az]*//g'`; do mkdir $i; mv $i.* $i/; done
您可以嘗試以下方法,
將此腳本與zip文件放在同一目錄中,並將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
如果全部是.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
禁用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.