デフォルトでは、多くの種類のエラーに対して、tar
stderr にメッセージを出力し、その後処理を続行します。これらのエラーは「回復可能な」エラーと呼ばれ、通常は権限の問題など、単一のファイルまたはアーカイブ メンバーに関連するエラーです。
時々、この動作は本当に不快です。たとえば、アーカイブを解凍していてディスクがいっぱいの場合、次のような結果になることがあります。
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
。