Me doy cuenta de que este hilo tiene más de unos pocos años, pero estoy comentando para aquellas personas que tropiezan con este hilo con el error.
Siempre que utilice una opción de compresión, tar abre implícitamente una conexión al programa subyacente utilizando un conducto. Entonces, en el ejemplo de OP: tar -xvzf $filename.tar.gz
, lo que harás realmente será ejecutar algo similar a esto: gunzip $filename.tar.gz | tar -xv -
. Puede verificar esto ejecutando un top
, donde verá dos procesos (uno para tar y otro para gzip).
A veces, sin embargo, la tubería se rompe. Por ejemplo, si el archivo no es un archivo gzip. Tome esto por ejemplo: tar -xvzf somefile.iso
, que sería equivalente a gunzip somefile.iso | tar -xv -
. En tal situación, gzip se equivocará. Cuando los errores gzip salgan, la tubería se romperá. Otra posibilidad sería si el archivo gzip era correcto, pero el archivo tar dentro de él estaba dañado. En este caso, gzip comienza a enviar la secuencia sin comprimir a tar, pero luego tar se da cuenta de que algo está mal y cierra la transmisión. gzip aquí saldrá error, porque su salida está cerrada.
En los valores de salida, un valor superior a 128 indica la terminación debido a una señal, y el valor superior a 128 significa qué señal provocó la terminación. Entonces, si restamos 128 del código de salida del OP de 141, obtenemos 13, que corresponde a SIGPIPE (man 7 signal
para obtener una lista de señales estándar y sus valores enteros correspondientes).
La página man enumera el comentario de SIGPIPE como "Tubo roto: escriba en la tubería sin lectores". Entonces, parece que gzip intenta escribir en el conducto, pero tar ha dejado de escuchar. Supongo que gzip está descomprimiendo el archivo con éxito, pero la secuencia no comprimida no es un archivo tar válido. Mi consejo aquí sería ejecutar gunzip en el archivo, luego ejecutar tar en el archivo de resultados y ver cuál falla (basado en el SIGPIPE, mi suposición aquí es que el alquitrán fallará). En cualquier caso, parece que estas versiones de las herramientas no leen el archivo (ya sea corrupción o un conflicto de versión de algún tipo).
¿Cómo se hicieron estos archivos (qué opciones para tar, etc)? ¿Se crearon en esta máquina u otra máquina? Si crea un archivo .tar.gz en esta máquina, ¿puede esta misma máquina extraer esos archivos sin el error?
Cambié mis scripts para hacer gunzip $ filname.tar.gz; tar -xvf $ filename.tar otra vez su tar que falla con 141 –
¿Intentó ejecutarlo con --verbose, y obtuvo alguna pista?tar también ejecuta rmt para cintas remotas; un problema intermitente podría ser un problema de red con las unidades de cinta. Saber qué sistema operativo está ejecutando puede ser útil. –
Oh, no importa el sistema operativo, lo veo ahora. –