簡體   English   中英

根據zip文件中包含的文件名將單個“ .zip”文件解壓縮到多個目錄中-Linux

[英]Unzip a single “.zip” file into multiple directories as per the name of the files contained in zip file - Linux

我有以下情況:-我的Zip文件= abcd.zip其內容:-

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

現在,我想將此壓縮文件解壓縮到文件夾a /,b /和c /。 (TXT文件可以是大寫或小寫)

因此,基本上,我希望將文件解壓縮到其自己的指定目錄中。

  1. 將存檔解壓縮到當前目錄。
  2. 執行以下命令:
    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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM