ファイルがアーカイブであることを確認し、その場合は解凍します。

ファイルがアーカイブであることを確認し、その場合は解凍します。

ファイルがアーカイブであることを確認し、を使用して解凍するにはどうすればよいですか7z?コマンドで確認できることを知っていますが、file出力のためスクリプトでは機能しません。どのタイプのアーカイブを予測できません。私はただ次のことをしたいと思います:

7zで抽出できますか?
その場合は抽出し、
そうでない場合はさらに抽出します。

Bashスクリプトを介して。

答え1

filename=/tmp/foo.gz

if 7z t $filename; then
    7z e $filename
else
    echo $filename not an archive.
fi

答え2

ユーティリティで実行された操作が失敗すると、ゼロ以外の7z終了コードが返されます。アーカイブを抽出した後に失敗した場合は、別の操作を実行してこれを利用できます。

if ! 7z e filename 2>/dev/null; then
    # do something else
fi

あるいは他にやりたいこととしたくないことによって

if 7z e filename 2>/dev/null; then
    exit
fi

# do something else

に短縮することができる

7z e filename 2>/dev/null && exit

# do something else

明らかにそれを含めることができます

if 7z t filename; then

fi

そして、これがアーカイブであるかどうかを判断する失敗とは別に、抽出失敗(ディスクスペースの不足や抽出中に発生する可能性がある他のエラーのため)をキャプチャします7z

完全なコードは次のとおりです。

if 7z t filename 2>/dev/null; then
    if 7z e filename 2>/dev/null; then
        echo 'All is good, archive extracted' >&2
    else
        echo 'Archive failed to extract' >&2
    fi
else
    echo '7z failed to process the file' >&2
fi

答え3

0が返されると、7z t <archive>ファイルは有効なアーカイブです。

関連情報