问题 如何使用单个命令将目录中的每个文件解压缩到与文件同名的新唯一目录中


我有一个充满zip文件的目录。每个都叫做'files1.zip'。 我的直觉是使用bash for循环来解压缩每个文件。

麻烦的是,许多文件会将其内容直接解压缩到父目录中,而不是将所有内容展开到它们自己的唯一目录中。所以,我得到文件汤。

我想确保'files1.zip'将所有文件倒入一个名为'files1'的目录中,依此类推。

作为一个额外的复杂功能,一些文件名有空格。

我怎样才能做到这一点?

谢谢。


1260
2018-06-02 20:32


起源

有关: http://stackoverflow.com/q/2463874/435605 - AlikElzin-kilaka


答案:


for f in *.zip; do
  dir=${f%.zip}

  unzip -d "./$dir" "./$f"
done

15
2018-06-02 20:50





简单的一个班轮

$ for file in `ls *.zip`; do unzip $file -d `echo $file | cut -d . -f 1`; done

0
2017-11-09 21:01



您的代码不适用于具有空格或以连字符开头的zip文件名。 - Roland Illig


您可以使用-d解压缩到其他目录。

for file in `echo *.zip`; do
    [[ $file =~ ^(.*)\.zip$ ]]
    unzip -d ${BASH_REMATCH[1]} $file
done

-1
2018-06-02 20:46



echo *.zip 不适用于包含空格的zip文件名。 - Neil
为什么不呢 for file in *.zip; do ...; done? - Roland Illig