ファイルがアーカイブであることを確認し、を使用して解凍するにはどうすればよいですか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>
ファイルは有効なアーカイブです。