我有一个包含 36,348 个文件 gz 文件的文件夹。我想全部解压缩。
跑步:
gunzip ./*
Run Code Online (Sandbox Code Playgroud)
结果是
-bash: /usr/bin/gunzip: Argument list too long
Run Code Online (Sandbox Code Playgroud)
解决这个问题的最简单方法是什么?
cuo*_*glm 12
尝试:
find . -type f -exec gunzip {} +
Run Code Online (Sandbox Code Playgroud)
这假设当前目录仅包含您要解压缩的文件。
限制在内核中,取决于传递给execve()
用于执行命令的系统调用的参数和环境的累积大小。您可以将其拆分为多个调用。
到当前目录下的gunzip
所有.gz
文件:
与zsh
:
autoload zargs # best in ~/.zshrc
zargs ./*.gz -- gunzip
Run Code Online (Sandbox Code Playgroud)
与ksh93
:
command -x gunzip ./*.gz
Run Code Online (Sandbox Code Playgroud)
GNUly:
printf '%s\0' *.gz | xargs -r0 gunzip
Run Code Online (Sandbox Code Playgroud)
POSIXly(和gunzip
):
find . ! -name . -prune -name '*.gz' -exec gunzip {} +
Run Code Online (Sandbox Code Playgroud)
(请注意,也会解压缩隐藏.gz
文件)
或者您可以在某些系统上提高该限制。在最新版本的 Linux 上:
ulimit -s unlimited
gunzip ./*.gz
Run Code Online (Sandbox Code Playgroud)