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>
밤새
(이 예에서는 파일 이름의 공백을 고려하지 않습니다.)