¿Se puede obligar a tar a salir en el primer error?

5

Por defecto, para muchos tipos de errores tarimprime un mensaje en stderr y luego continúa su camino: los errores que llama errores "recuperables", generalmente errores relacionados con un solo archivo o miembro de archivo, como problemas de permisos.

A veces este comportamiento es realmente desagradable. Por ejemplo, si estoy descomprimiendo un archivo y el disco está lleno, entonces puedo obtener algo como esto:

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

eso puede continuar por miles de líneas en un gran archivo. Si esto sucede en una secuencia de comandos, prefiero tarsalir rápidamente para poder dar un error al usuario.

¿Hay alguna forma de forzar tara salir en el primer error que ve? No lo veo en un escaneo de tar --help. Cualquier receta sensata para un script de envoltura para lograr este propósito también sería aceptada con gratitud.

Greg Price
fuente

Respuestas:

4

Una forma es redirigir la salida de error estándar a /dev/full, por ejemplo:

tar ... 2>/dev/full

Esto hará que tar falle cuando intente enviar un mensaje de advertencia stderr.

Maxim Egorushkin
fuente
+1 Niza. Ni siquiera he oído hablar de él /dev/full. Consejo útil
trojanfoe
Idea inteligente, pero no funciona. Al menos no con GNU tar 1.22, la versión que tengo a mano. Ajustar el tarproceso confirma que continúa alegremente después de cada error de escritura en error estándar. ¿Realmente has probado esta idea? ¿De qué versión tar?
Greg Price
Lo intenté con otras aplicaciones. tarprobablemente solo ignora el error. Es necesario que haya una tubería para SIGPIPEenviarla taren caso de error para eliminarla.
Maxim Egorushkin