解压缩目录中的所有文件

时间:2010-03-03 20:41:55

标签: linux shell wildcard unzip

我有一个ZIP文件目录(在Windows机器上创建)。我可以使用unzip filename手动解压缩它们,但是如何通过shell解压缩当前文件夹中的所有ZIP文件?

使用Ubuntu Linux服务器。

16 个答案:

答案 0 :(得分:319)

根据this link

,这适用于bash
  

解压缩\ * .zip

答案 1 :(得分:77)

只需输入一些引号来逃避通配符:

unzip "*.zip"

答案 2 :(得分:52)

使用zip文件的文件名将当前目录中的所有zip文件提取到新的目录中。

ex,以下文件:

myfile1.zip
myfile2.zip 

将被提取到:

./myfile1/files...
./myfile2/files...

Shell脚本:

#!/bin/sh
for zip in *.zip
do
  dirname=`echo $zip | sed 's/\.zip$//'`
  if mkdir "$dirname"
  then
    if cd "$dirname"
    then
      unzip ../"$zip"
      cd ..
      # rm -f $zip # Uncomment to delete the original zip file
    else
      echo "Could not unpack $zip - cd failed"
    fi
  else
    echo "Could not unpack $zip - mkdir failed"
  fi
done

答案 3 :(得分:32)

解压缩* .zip,或者如果它们在子文件夹中,则为

find . -name "*.zip" -exec unzip {} \;

答案 4 :(得分:12)

for i in *.zip; do
  newdir="${i:0:-4}" && mkdir "$newdir"
  unzip "$i" -d  "$newdir"
done

这会将所有zip存档解压缩到以zip存档的文件名命名的新文件夹中。

a.zip b.zip c.zip将分别解压缩到a b c个文件夹中。

答案 5 :(得分:7)

解压缩所有.zip个文件,并将内容存储在与.zip文件位于同一文件夹的新文件夹中:

find -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;

这是@phatmanace's answer的扩展,地址为@RishabhAgrahari's comment

  

这将提取当前目录中的所有zip文件,如果我想在相应的子文件夹中提取zip文件(存在于子文件夹中),该怎么办?

答案 6 :(得分:6)

安装了aunpack -e *.zip

atool。 它具有智能处理错误的优点,并且总是解压缩到子目录中,除非zip只包含一个文件。因此,没有使用大量文件污染当前目录的危险,因为在没有目录结构的zip上有unzip

答案 7 :(得分:4)

在任何POSIX shell中,这将解压缩到每个zip文件的不同目录:

for file in *.zip
do
    directory="${file%.zip}"
    unzip "$file" -d "$directory"
done

答案 8 :(得分:3)

如果“当前目录”是指zip文件所在的目录,那么我将使用以下命令:

find . -name '*.zip' -execdir unzip {} \; 

摘录自“ man page

-execdir command ;
-execdir command {} +

类似于-exec,但是指定的命令是从包含匹配文件的子目录运行的,该目录通常不是您开始查找的目录。这是一种更安全的调用命令的方法,因为它避免了在解析匹配文件的路径时出现争用情况。与-exec选项一样,-execdir的'+'形式将建立一个命令行来处理多个匹配文件,但是任何给定的命令调用都只会列出同一子目录中存在的文件。如果使用此选项,则必须确保$ PATH环境变量不引用当前目录;否则,请参见参考手册。否则,攻击者可以通过在运行-execdir的目录中保留一个适当命名的文件来运行所需的任何命令。

答案 9 :(得分:2)

使用此:

for file in `ls *.Zip`; do
unzip ${file} -d ${unzip_dir_loc}
done

答案 10 :(得分:2)

for file in 'ls *.zip'; do unzip "${file}" -d "${file:0:-4}"; done

答案 11 :(得分:0)

这是使用Pedro Lobito教导的answer How to loop through a directory recursively to delete files with certain extensions的变体:

shopt -s globstar
root_directory="."

for zip_file_name in **/*.{zip,sublime\-package}; do
    directory_name=`echo $zip_file_name | sed 's/\.\(zip\|sublime\-package\)$//'`
    printf "Unpacking zip file \`$root_directory/$zip_file_name\`...\n"

    if [ -f "$root_directory/$zip_file_name" ]; then
        mkdir -p "$root_directory/$directory_name"
        unzip -o -q "$root_directory/$zip_file_name" -d "$directory_name"

        # Some files have the executable flag and were not being deleted because of it.
        # chmod -x "$root_directory/$zip_file_name"
        # rm -f "$root_directory/$zip_file_name"
    fi
done

答案 12 :(得分:0)

如果文件是gzip'd。然后只需使用:

gunzip -rfk .

从根目录通过保留原始文件(或删除-k来递归地)提取相应目录中的文件

答案 13 :(得分:-2)

要解压缩目录中的所有文件,只需在终端中键入此cmd:

ard

答案 14 :(得分:-3)

for i in `ls *.zip`; do unzip $i; done

答案 15 :(得分:-3)

使用

sudo apt-get install unzip 

unzip file.zip -d path_to_destination_folder

在linux中解压缩文件夹