gzip圧縮ファイルが空であることを確認する方法は?

gzip圧縮ファイルが空であることを確認する方法は?

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

関連情報