根据zip文件中包含的文件名称 - Linux将单个“.zip”文件解压缩到多个目录中

时间:2017-08-16 12:32:15

标签: linux bash shell scripting

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

  1. A.TXT
  2. b.txt
  3. c.txt
  4. 现在我要将此zip文件解压缩到文件夹a /,b /和c /中。 (Txt文件可以是大写或小写)

    所以基本上我希望将文件解压缩到他们自己的指定目录中。

3 个答案:

答案 0 :(得分:0)

  1. 将您的存档解压缩到当前目录。
  2. 执行以下命令:
    for i in `ls -1 *.txt | sed 's/\.[a-z]*//g'`; do mkdir $i; mv $i.* $i/; done

答案 1 :(得分:0)

你可以尝试如下,

将此脚本放在与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 

答案 2 :(得分: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禁用。