解压缩一批文件


33

当我尝试

 unzip filename.zip

有用。但是,我需要解压缩一系列zip文件。

为什么是:

 find . -name "*.zip" -print0 | xargs -0 unzip

要么

 ls *.zip | xargs unzip

不工作吗?

在两种情况下,我都会收到“警告:文件名不匹配:”消息。

Answers:


48

您可以发出以下命令:

$ unzip '*.zip'

请看这里供参考


我没有说清楚,但是它们不在同一目录中。因此,我需要find的输出。
jeannoburto

4
谢谢。这可能完全符合实际问题,但这解决了我的问题。我正在尝试unzip *,它caution: filename not matched为每个文件返回了,但unzip '*.zip'完成了工作。
伊万

27

您的命令无法正常工作,因为它们会将所有文件都填充到同一命令行中。尽管大多数程序unzip都可以使用,但将第一个参数作为zip文件,并将第一个参数作为要从中提取的文件。您需要为每个文件执行一次命令:

find . -name "*.zip" -print0 | xargs -0 -n1 unzip

要么

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

如果确实有很多文件,第二个似乎更好。(否则,它抱怨使用xargs的命令太长了)
Recct

5

在bash中,您还可以执行以下操作:

for i in *.zip; do
    unzip "$i"
done

unzip可以进行-d切换,以便将输出定位到不同的位置。

例如:

uzdir=/path/to/unzips
for i in *.zip; do
    [ -d "$uzdir/$i" ] || mkdir -p "$uzdir/$i"
    unzip "$i" -d "$uzdir/$i"
done

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.