多くのファイルを含むフォルダを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>

一晩

(この例では、ファイル名のスペースを考慮しません。)

関連情報