提取文件夹中包含的 .gz 文件

提取文件夹中包含的 .gz 文件

我有一个包含大约 320116 个 .pdb.gz 文件的文件夹。我想把它们全部解压。如果我使用gunzip *.gz,它会给我一个错误,即参数列表太长。该文件夹大约有2GB。请给我一个合适的建议。

答案1

find . -name '*.pdb.gz' -exec gunzip {} +

-exec gunzip {} +gunzip在其命令行上提供许多但不是太多的文件名。这比为每个文件-exec gunzip {} \;启动一个新进程更有效。gunzip

答案2

每当出现“参数列表太长”错误时,您可以通过多次调用所需的命令来解决该问题,每次都使用要使用的参数的子集。xargs是一个可以帮助您自动完成此操作的工具。

find . -type f -a -name \*.pdb.gz -print0 | xargs -0 gunzip

答案3

我认为这应该可行,它将每个文件的路径/名称单独传递给gunzip进行处理:

find /my/dir -name "*.pdb.gz" -execdir gunzip "{}" \;

答案4

如果您有一台多核机器,您可能会发现使用它gunzip并不会最大限度地发挥机器的功能。为此,您需要并行运行多个gunzip。手动跟踪哪些操作在哪个终端中完成是很麻烦的,但您可以使用 GNU parallel 轻松做到这一点:

find . -name "*.gz" | parallel -X gunzip {}

相关内容