解压一批文件

jea*_*rto 36 command-line zip

当我尝试

 unzip filename.zip
Run Code Online (Sandbox Code Playgroud)

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

为什么是:

 find . -name "*.zip" -print0 | xargs -0 unzip
Run Code Online (Sandbox Code Playgroud)

或者

 ls *.zip | xargs unzip
Run Code Online (Sandbox Code Playgroud)

不工作?

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

vfb*_*lva 51

您可以发出以下命令:

$ unzip '*.zip'
Run Code Online (Sandbox Code Playgroud)

在这里查看以供参考

  • 谢谢。这可能与实际问题完美匹配,但这解决了我的问题。我正在尝试 `unzip *`,它为每个文件返回 `caution: filename not matching`,但 `unzip '*.zip'` 完成了这项工作。 (4认同)

Kev*_*vin 30

您的命令不起作用,因为它们将所有文件都填充到同一命令行中。虽然这适用于大多数程序,但unzip会将第一个参数作为 zip 文件,并将第一个参数作为从中提取的文件。您需要为每个文件执行一次命令:

find . -name "*.zip" -print0 | xargs -0 -n1 unzip
Run Code Online (Sandbox Code Playgroud)

或者

find . -name '*.zip' -exec unzip {} \;
Run Code Online (Sandbox Code Playgroud)


slm*_*slm 6

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

for i in *.zip; do
    unzip "$i"
done
Run Code Online (Sandbox Code Playgroud)

unzip可以带-d开关,这样你就可以将输出定位到不同的位置。

例如:

uzdir=/path/to/unzips
for i in *.zip; do
    [ -d "$uzdir/$i" ] || mkdir -p "$uzdir/$i"
    unzip "$i" -d "$uzdir/$i"
done
Run Code Online (Sandbox Code Playgroud)