最初のエラーで tar を強制終了できますか?

最初のエラーで tar を強制終了できますか?

デフォルトでは、多くの種類のエラーに対して、tarstderr にメッセージを出力し、その後処理を続行します。これらのエラーは「回復可能な」エラーと呼ばれ、通常は権限の問題など、単一のファイルまたはアーカイブ メンバーに関連するエラーです。

時々、この動作は本当に不快です。たとえば、アーカイブを解凍していてディスクがいっぱいの場合、次のような結果になることがあります。

tar: python-lib/PyML/classifiers/ext/_cgist.so: Wrote only 2048 of 10240 bytes
tar: python-lib/PyML/classifiers/ext/_csmo.so: Cannot write: No space left on device
tar: python-lib/PyML/classifiers/ext/_csvmodel.so: Cannot write: No space left on device
tar: python-lib/PyML/classifiers/ext/_knn.so: Cannot write: No space left on device
tar: python-lib/PyML/classifiers/ext/_libsvm.so: Cannot write: No space left on device
tar: python-lib/PyML/classifiers/ext/_mylibsvm.so: Cannot write: No space left on device
tar: python-lib/PyML/classifiers/ext/cgist.py: Cannot write: No space left on device
tar: python-lib/PyML/classifiers/ext/csmo.py: Cannot write: No space left on device

大きなアーカイブでは、これが何千行にも及ぶことがあります。スクリプトでこれが発生した場合は、tarユーザーにエラーをすぐに表示できるように、ただちに終了する方がよいでしょう。

最初のエラーが発生したときに強制的に終了する方法はありますかtar? のスキャンでは見つかりませんtar --help。この目的を達成するためのラッパー スクリプトの妥当なレシピがあれば、ぜひ教えてください。

答え1

1 つの方法は、標準エラー出力を にリダイレクトすることです/dev/full。例:

tar ... 2>/dev/full

これにより、 tar が警告メッセージを出力しようとすると失敗しますstderr

関連情報