tar.gzファイルで2つのことをしたいと思います。
- 異常がないか確認
- 成功した場合 - 抽出されたファイルの数を確認してください。
私が見つけたこれ最初のオプションの場合。次に、次のようにコマンドを実行します。tar -xvzf bad_file.tar.gz && echo ok || echo fail
最後に、すべてのエラー+失敗を表示します。これが私が望むものです。
tar -xvzf bad_file.tar.gz | wc -l
2番目の部分ではうまくいきましたが、エラーが発生してもファイル数を返すことを使用しました。
2番目の部分の例(エディタでファイルを開き、1行だけ削除しました):
[root@zt avi]# tar -xvzf damaged_file.tar.gz | wc -l
gzip: stdin: invalid compressed data--crc error
gzip: stdin: invalid compressed data--length error
tar: Unexpected EOF in archive
tar: Unexpected EOF in archive
tar: Error is not recoverable: exiting now
3
これら2つのコマンドを組み合わせる方法は?
答え1
アーカイブ抽出を個別にテストし、成功した場合はファイル数を計算します。アーカイブが抽出されたディレクトリの名前がわからない場合は、新しいディレクトリを作成し、そのディレクトリにアーカイブを抽出します。たぶん、次のようなものがあります。
#!/bin/sh
if [ -d extracted ]; then
echo 'please remove directory "extracted"' >&2
exit 1
fi
mkdir extracted
if ! tar -xvz -f bad_file.tar.gz -C extracted; then
echo 'extraction failed' >&2
echo 'directory "extracted" may contain partially extracted archive' >&2
exit 1
fi
# extraction of archive was successful, count files extracted
find extracted -type f -exec echo . ';' | wc -l
最後に、find
ディレクトリ内の各ファイルの点を出力しますextracted
。 wc -l
ポイントを計算します。これは、抽出されたディレクトリのパス名に改行文字が含まれないようにするために行われます。