web-dev-qa-db-ja.com

Zipファイルがbashで空かどうかを確認する方法

Zipファイルが空かどうかを確認するにはどうすればよいですか? Zipファイルのサイズが常にゼロであるとは限らないため、bashで-sを使用することはできません。 Zipファイルに空のディレクトリがある場合は、ファイルを削除します。それ以外の場合は、ファイルを抽出します。

3
CBR

Info-Zipツール(Zipunzipzipinfo)がインストールされている場合は、Zipファイルでzipinfoを使用して、出力をに送信できます。 /dev/null。ファイルが空でない場合、ステータスは0になります。

そう:

if zipinfo foo.Zip > /dev/null; then
    echo not empty
else
    echo empty
fi
3

zipinfo -t foo.Zipを実行すると、Zipファイルに何も含まれていない場合に終了ステータス($?から)でエラーが発生します。私が実行しているバージョン(3.00)では、これは1になりますが、これは単なる一般的なエラーコードであると思います。そのため、あいまいさが他の問題を引き起こす可能性があります。

また、ファイルに関する基本情報を含む文字列であるコマンドのテキスト出力を処理する必要があります。この答えは上記のいずれかに似ていると思います。

編集:戻り値があいまいにならないようにしたい場合(そしてgrepの気分になっている場合)、上記のコマンドの出力を「空のzipfile」にgrepできます。

1
Paul Holden

jarがインストールされている場合は、-tオプションを使用できます。

jar -tvf file.Zip

ディレクターにはすべて末尾にスラッシュが付いているので、grepにパイプできます。

if jar -tvf file.Zip | egrep -v '/$' > /dev/null; then # we have some files!
  unzip file.Zip
else
  rm -f file.Zip
fi
0
Tim Pote