ファイルがアーカイブかどうかを確認し、7z
で抽出するにはどうすればよいですか? file
コマンドで確認できることを理解していますが、出力が原因でスクリプトでは機能しません。アーカイブの種類を予測することはできません。私は次のようなことをしたいだけです:
7zで抽出できますか?
「はい」の場合、抽出し、
そうでない場合は、さらに進んでください
bash sriptによる。
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
filename=/tmp/foo.gz
if 7z t $filename; then
7z e $filename
else
echo $filename not an archive.
fi
7z t <archive>
は0を返し、ファイルは有効なアーカイブでした。