Es extraño que nadie más haya mencionado que las versiones modernas de GNU tar
te permiten comprimir mientras estás agrupando:
tar -czf output.tar.gz directory1 ...
tar -cjf output.tar.bz2 directory2 ...
También puede utilizar el compresor de su elección siempre que admita las opciones ' -c
' (a stdout, o desde stdin) y ' -d
' (descomprimir):
tar -cf output.tar.xxx --use-compress-program=xxx directory1 ...
Esto le permitiría especificar cualquier compresor alternativo.
[ Agregado : si está extrayendo gzip
o bzip2
comprimiendo archivos, GNU tar
los detecta automáticamente y ejecuta el programa apropiado. Es decir, puedes usar:
tar -xf output.tar.gz
tar -xf output.tgz # A synonym for the .tar.gz extension
tar -xf output.tar.bz2
y estos se manejarán adecuadamente. Si utiliza un compresor no estándar, debe especificarlo cuando realice la extracción.]
El motivo de la separación es, como en la respuesta seleccionada, la separación de funciones. Entre otras cosas, significa que la gente podría usar el cpio
programa ' ' para empaquetar los archivos (en lugar de tar
) y luego usar el compresor de su elección (una vez, el compresor preferido era pack
, más tarde fuecompress
(que fue mucho más efectivo que pack
), y luego gzip
que corrió en torno a sus predecesores, y es completamente competitivo con zip
(que se ha portado a Unix, pero no es nativo allí), y ahora bzip2
, en mi experiencia, generalmente tiene una ventaja del 10-20% sobre gzip
.
[ Agregado : alguien señaló en su respuesta que cpio
tiene convenciones divertidas. Eso es cierto, pero hasta que GNU tar
obtuviera las opciones relevantes (' -T -
'), cpio
era el mejor comando cuando no deseaba archivar todo lo que estaba debajo de un directorio determinado; de hecho, podía elegir exactamente qué archivos se archivarían. La desventaja cpio
era que no solo podía elegir los archivos, sino que tenía que elegirlos. Todavía hay un lugar donde las cpio
puntuaciones; puede hacer una copia in situ de una jerarquía de directorios a otra sin ningún almacenamiento intermedio:
cd /old/location; find . -depth -print | cpio -pvdumB /new/place
Por cierto, la -depth
opción " " activada find
es importante en este contexto: copia el contenido de los directorios antes de establecer los permisos en los propios directorios. Cuando verifiqué el comando antes de ingresar la adición a esta respuesta, copié algunos directorios de solo lectura (permiso 555); cuando fui a eliminar la copia, tuve que relajar los permisos en los directorios antes de que ' rm -fr /new/place
' pudiera terminar. Sin la -depth
opción, el cpio
comando habría fallado. Solo recordé esto cuando fui a hacer la limpieza; la fórmula citada es así de automática para mí (principalmente en virtud de muchas repeticiones durante muchos años). ]