我有以下情形: - 我的Zip文件= abcd.zip 內容: -解壓一個單一的「.ZIP」文件分成多個目錄,每包含在壓縮文件中的文件名 - Linux的
- A.TXT
- b.txt
- c.txt
現在我想解壓此zip文件夾到A/b /和c /。 (TXT文件可以是大寫或小寫)的
所以基本上我期待解壓縮文件到自己指定的目錄。
我有以下情形: - 我的Zip文件= abcd.zip 內容: -解壓一個單一的「.ZIP」文件分成多個目錄,每包含在壓縮文件中的文件名 - Linux的
現在我想解壓此zip文件夾到A/b /和c /。 (TXT文件可以是大寫或小寫)的
所以基本上我期待解壓縮文件到自己指定的目錄。
for i in `ls -1 *.txt | sed 's/\.[a-z]*//g'`; do mkdir $i; mv $i.* $i/; done
你可以嘗試如下,
將這個腳本在同一目錄中的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
。
你的zip文件不包含目錄?我的意思是它總是隻包含.txt文件? – Abis
是的,它不包含任何目錄 –