gunzip 一个包含许多文件的文件夹

gunzip 一个包含许多文件的文件夹

我有一个包含 36,348 个 gz 文件的文件夹。我想把它们全部解压。

跑步:

gunzip ./*

结果是

-bash: /usr/bin/gunzip: Argument list too long

解决这个问题最简单的方法是什么?

答案1

尝试:

find . -type f -exec gunzip {} +

这假设当前目录仅包含您要解压缩的文件。

答案2

该限制位于内核中,并且取决于传递给execve()用于执行命令的系统调用的参数和环境的累积大小。您可以将其拆分为多次调用。

到当前目录下的gunzip所有文件:.gz

zsh

autoload zargs # best in ~/.zshrc
zargs ./*.gz -- gunzip

ksh93

command -x gunzip ./*.gz

GNUly:

printf '%s\0' *.gz | xargs -r0 gunzip

POSIXly(和gunzip):

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

(注意,隐藏文件也会被解压.gz

或者您可以提高某些系统上的限制。在最新版本的 Linux 上:

ulimit -s unlimited
gunzip ./*.gz

答案3

我发现的最简单的方法是:

gunzip -r .

答案4

一个效率较低(但长期运行非常灵活)的过程是创建批处理文件:

ls | grep .gz | sed -e 's/^/gunzip /' | less

向您展示将会发生什么,因此简单的拼写错误不会毁掉您的系统

ls | grep .gz | sed -e 's/^/gunzip /' | bash

现在就做

ls | grep .gz | sed -e 's/^/gunzip /' > unpack
at 02:00
bash unpack
<ctrl-d>

过夜

(请注意,此示例不考虑文件名中的空格。)

相关内容