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

问题描述:

我有一个完整的zip文件目录。每个被称为'files1.zip'。 我的直觉是使用bash for循环来解压每个文件。如何使用单个命令将目录中的每个文件解压到与文件名称相同的新唯一目录中

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

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

作为一个增加的复杂,一些文件名有空格。

我该怎么做?

谢谢。

+0

相关:[http://*.com/q/2463874/435605](http://*.com/q/2463874/435605 ) – 2016-07-14 07:03:15

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

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

您可以使用-d将其解压缩到不同的目录。

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

'echo * .zip'不适用于包含空格的zip文件名。 – Neil 2011-06-02 20:48:04

+4

为什么不只是'用于* .zip文件;做...; done'? – 2011-06-02 20:48:53

简单的一个班轮

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