![gunzip 一个包含许多文件的文件夹](https://linux22.com/image/54615/gunzip%20%E4%B8%80%E4%B8%AA%E5%8C%85%E5%90%AB%E8%AE%B8%E5%A4%9A%E6%96%87%E4%BB%B6%E7%9A%84%E6%96%87%E4%BB%B6%E5%A4%B9.png)
我有一个包含 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>
过夜
(请注意,此示例不考虑文件名中的空格。)