tarを使用して2つのコマンドを接続します(wc -l + echo ok || echo failed)

tarを使用して2つのコマンドを接続します(wc -l + echo ok || echo failed)

tar.gzファイルで2つのことをしたいと思います。

  1. 異常がないか確認
  2. 成功した場合 - 抽出されたファイルの数を確認してください。

私が見つけたこれ最初のオプションの場合。次に、次のようにコマンドを実行します。tar -xvzf bad_file.tar.gz && echo ok || echo fail最後に、すべてのエラー+失敗を表示します。これが私が望むものです。

tar -xvzf bad_file.tar.gz | wc -l2番目の部分ではうまくいきましたが、エラーが発生してもファイル数を返すことを使用しました。

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ディレクトリ内の各ファイルの点を出力しますextractedwc -lポイントを計算します。これは、抽出されたディレクトリのパス名に改行文字が含まれないようにするために行われます。

関連情報