gzip圧縮ファイルが空であることを確認する簡単な方法はありますか?それとも最初に解凍する必要がありますか?
例:
$ touch foo
$ if [ -s foo ]; then echo not empty; fi
$ gzip foo
$ if [ -s foo.gz ]; then echo not empty; fi
not empty
$ wc -l foo.gz
1 foo.gz
答え1
gzip -l foo.gz | awk 'NR==2 {print $2}'
圧縮されていないデータのサイズを印刷します。
if LC_ALL=C gzip -l foo.gz | awk 'NR==2 {exit($2!=0)}'; then
echo foo is empty
else
echo foo is not empty
fi
あるいは、データの解凍を開始することもできます。
if [ -n "$(gunzip <foo.gz | head -c 1 | tr '\0\n' __)" ]; then
echo "foo is not empty"
else
echo "foo is empty"
fi
head -c
(システムが最初のバイトを抽出する必要がない場合は、head -n 1
代わりに最初の行を抽出してください。)
答え2
「空」が圧縮されていないファイルがゼロバイトであることを意味する場合は、それを使用して圧縮されていgzip --list foo.gz
ないファイルのサイズを決定できます。次のようになります。
$ gzip --list foo.gz
compressed uncompressed ratio uncompressed_name
24 0 0.0% foo
答え3
test -z $(gzip -cd foo.gz | head -c1) && echo "empty"
または以下を使用してif
:
if [ -z $(gzip -cd foo.gz | head -c1) ]; then
echo "empty"
fi
zcat
時には、より短い「フォーム」に接続したり、gunzip -c
使用しgzip -cd
たい場合があります。
答え4
gzipファイルサイズが51の場合は空です。ファイルに文字を追加してファイルをgzipに圧縮するたびに、圧縮ファイルのサイズが51から増加します。
ただし、これを保証するためにzcatを使用できます。 gzipの人々の場合:
gzip以外の形式のファイル(圧縮された.Zファイルなど)の場合、圧縮されていないサイズは-1です。これらのファイルの圧縮されていないサイズを取得するには、次のものを使用できます。
zcat file.Z | wc -c