Respuestas:
tar
solo crea un solo archivo a partir de múltiples archivos, no realiza compresión a menos que combine un programa de compresión como gzip
o bzip2
(al que puede llamar desde dentro tar
utilizando las opciones -z
o -j
, respectivamente). zip
combina el archivo y la compresión en un solo programa.
alquitrán
Código Postal
El hecho de que zip comprima los archivos por separado afectará las relaciones de compresión, particularmente en muchos archivos pequeños similares.
(Al menos esto era exactamente correcto hace una década).
Tar conserva muchos más metadatos que Zip, mira mi comparación (está un poco desactualizado):
(Haga clic para ampliar)
El alquitrán pasa el 65% de las pruebas, donde Zip solo pasa el 17%. Puse a disposición el paquete de pruebas en github con licencia BSD para que pueda probarlo usted mismo si tiene Mac. Para Linux no estoy seguro de si hay metadatos, por lo que estas pruebas pueden no ser relevantes.
La eficiencia se puede medir de diferentes maneras:
También hay otras preguntas, como "¿Qué tan comunes son las herramientas para manipular los archivos resultantes?"
Entonces, por ejemplo, bzip2
crea archivos más pequeños que gzip
, pero puede llevar mucho más tiempo. Además, en mi experiencia, gzip
es universal en sistemas similares a Unix, pero bzip2
aún no lo es (aunque es muy común y generalmente es fácil de obtener).
Como señaló Wim, el alquitrán no se comprime. Si agrega comprimir el tar (por ejemplo, para obtener un .tar.gz o .tar.bz2), está comprimiendo todo el archivo tar de una vez. Por el contrario, zip comprime cada archivo individualmente.
La eficiencia depende de la carga de trabajo. Específicamente, zip le permite acceder a archivos individuales directamente. Con tar, primero debe buscar a través de los archivos no deseados (comprimidos) antes. El rendimiento de la compresión depende de lo que esté comprimiendo. tar
a bzip2
menudo es mejor para una gran cantidad de archivos similares (por ejemplo, un directorio fuente). zip
podría ser mejor si cada archivo tiene un contenido muy diferente.
Los archivos Zip contienen un directorio central de sus contenidos al final (lo más probable es que evite tener que crear el directorio de antemano, donde aún no sabe qué habrá dentro). Esto permite extraer rápidamente archivos individuales sin tener que descomprimir todo el archivo: simplemente lea el directorio de archivos y extraiga solo lo que necesita. Sin embargo, esto requiere que todo el archivo sea accesible, y requiere acceso aleatorio que solo está disponible en dispositivos de bloque (disquetes, discos duros). Además, el directorio de archivo es vulnerable: si el archivo se trunca por algún motivo, se requiere mucha magia para extraer algo útil del archivo.
Los archivos zip se crearon para el uso de BBS, donde era importante poder agrupar el contenido de un directorio en un solo archivo (y comprimido), en lugar de tener que descargar posiblemente miles de archivos individuales. Al igual que la mayoría de los sitios web, agrupan sus descargas incluso hoy en día, por las mismas razones.
Los archivos de alquitrán se diseñaron para agrupar copias de seguridad que se utilizarán para unidades de cinta, por lo tanto, para acceso secuencial . No hay directorio central; en cambio, el archivo contiene bloques de encabezado a intervalos regulares que indican qué archivos seguirán en los siguientes bloques. Los archivos de alquitrán están destinados a ser leídos de una sola vez; Si solo se va a extraer un solo archivo, el archivo se lee secuencialmente, comenzando desde el principio hasta que se encuentra el archivo solicitado (que también puede estar al final). La compresión se aplica encima de eso; cada uno de los diversos programas de compresión que se aplican a los archivos de alquitrán ( compress
, gzip
,bzip2
etc.) son compresores de flujo y no alteran la naturaleza secuencial del archivo en ningún asunto. En el peor de los casos, necesitaría un poco más de bloques hasta que pueda comenzar a extraer.
Esto puede sonar como una diferencia trivial, pero de hecho representa un polo opuesto en filosofía. Con los archivos zip, siempre existe la necesidad de tener todo el archivo a mano para hacer algo útil con él, mientras que un archivo tar se puede transmitir a una tubería. Puedo descargar un archivo tar grande y comenzar a extraerlo desde el principio, tan pronto como lleguen los primeros bloques (y tal vez interrumpa la descarga tan pronto como obtenga el archivo que estoy buscando). Para un archivo Zip, tengo que esperar hasta que aparezca el directorio del archivo, que aparece al final del archivo. Pero una vez que lo tenga todo el archivo a la mano, la extracción de contenido parcial de ella será mucho más rápido de un archivo tar.
Ambos formatos tienen un punto muy fuerte para ellos, dependiendo de dónde y cómo se usen. Dado que las tuberías (y, por lo tanto, la noción de transmisión de datos de un proceso a otro) solo existen realmente en el mundo de Unix, la ventaja principal de los archivos tar se pierde en otros sistemas, por lo que los archivos Zip son mucho más populares allí. Pero los archivos de alquitrán son más flexibles, por eso los prefiero cada vez que tengo una opción.
Como el otro ya dijo, tar crea un gran "bloque" de todos los archivos que se pueden comprimir con un compresor de flujo como gzip o bzip2.
La desventaja de esto es que tiene que descomprimir todo el archivo para acceder a un archivo dentro del archivo.
La ventaja de esto es que la relación de compresión suele ser mayor, especialmente cuando los archivos comprimidos son muy similares.
Otros empacadores como "rar" tienen un "modo de bloqueo" (o similar) para tener el mismo efecto.