一次解压多个文件

g_p*_*g_p 27 bash

.zip在一个文件夹中有 200多个文件。我不想一一解压。我想使用单个命令或脚本提取那些。怎么做。

ter*_*don 41

如果你真的想并行解压缩它们,你可以这样做

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

但是,这将为 N 个 .zip 文件启动 N 个进程,并且可能对您的系统造成很大负担。对于更可控的方法,一次只启动 10 个并行进程,试试这个:

find . -name '*.zip' -print0 | xargs -0 -I {} -P 10 unzip {}
Run Code Online (Sandbox Code Playgroud)

要控制启动的并行进程的数量,请更改-P为您想要的任何内容。如果您不想递归到子目录,请执行以下操作:

find . -maxdepth 1 -name '*.zip' -print0 | xargs -0 -I {} -P 10 unzip {}
Run Code Online (Sandbox Code Playgroud)

或者,您可以按照@OleTange 在评论中的建议安装GNU parallel并运行

parallel unzip ::: *zip
Run Code Online (Sandbox Code Playgroud)

  • 并行运行是个好主意,但磁盘 I/O 不会成为主要瓶颈吗? (3认同)

Way*_*rad 18

GNU并行命令非常适合于这种类型的事情。后:

$ sudo apt-get install parallel
Run Code Online (Sandbox Code Playgroud)

然后

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

这将使用尽可能多的内核,让每个内核忙于解压缩,直到它们全部完成。


nux*_*nux 12

您可以使用以下命令:

首先将终端中的目录更改为包含 .zip 文件的目录:

cd /path
Run Code Online (Sandbox Code Playgroud)

然后执行此命令解压缩所有 .zip 文件:

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


g_p*_*g_p 10

如果您的.zip文件夹中有很多文件并且您想解压缩所有文件,请打开终端并使用以下命令转到您的文件夹:

cd <path_to_folder>
Run Code Online (Sandbox Code Playgroud)

现在使用此命令解压缩所有.zip文件:

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

  • 如果任何文件名包含空格,这将失败。 (3认同)

Ell*_*sch 6

你可以-exec像这样使用 find ,

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

如果文件名称中有空格,这起作用。