Yo uso GNU tar. Puede detectar automáticamente el tipo de compresión al comprimir / descomprimir archivos. Pero necesito descomprimir un archivo de stdin y se desconoce el tipo de compresión. Noté que el alquitrán me puede dar sugerencias correctas como:
tar: Archive is compressed. Use -z option
Pero quiero que tar use esa opción de compresión automáticamente sin pedirme que ingrese ese argumento. ¿Cómo puedo hacer eso? ¿Por qué no tar simplemente descomprime ya que ya conoce el tipo de compresión?
¡Gracias!
linux
compression
tar
James
fuente
fuente
tar
no sabe qué tipo de datos tienestdin
hasta después de leerlos, y para entonces es demasiado tarde para llamar al programa de descompresión. Es compatible con gzip, bzip2 y otros. Evitar este problema no es fácil (tendría que almacenar los datos en el búfer), por lo que solo le indica que intente nuevamente.fork()
/exec()
método para canalizar los datos a través de una utilidad de descomprimir. La utilidad leería desde lastdin
tubería y ahora faltaría el primer 4K. No hay forma de volver a colocar los datos en la tubería después de leerlos.cat buffer - | gunzip
. (Alternativamente, las E / S sin bloqueo podrían usarse para evitar la necesidad del proceso adicional).Respuestas:
Esta no es la respuesta que desea escuchar, pero GNU tar no lo admite de acuerdo con su manual:
- 8.1.1 Creación y lectura de archivos comprimidos
fuente
Finalmente, me di cuenta de que la razón por la que no puedo permitir que tar detecte y descomprima el archivo de stdin es que uso GNU tar. El tar de BSD puede hacerlo automáticamente sin problema. Entonces decido usar bsdtar en lugar de tar en mi script ahora.
fuente