Me preguntaba si (y, por supuesto, cómo) es posible decir tar
que extraiga varios archivos en una sola ejecución.
Soy un usuario experimentado de Unix durante varios años y, por supuesto, sé que puede usar for
o find
cosas así para llamar tar
una vez por cada archivo que desee extraer, pero no pude encontrar una línea de comando que causara mi tar
extraer dos archivos .tar.gz a la vez. (Y no, no hay nada de malo for
, solo estoy preguntando si es posible prescindir de él).
Estoy haciendo esta pregunta por curiosidad, tal vez
- hay un extraño tenedor de
tar
algún lugar que soporta esto - alguien sabe cómo usar el
-M
parámetro quetar
me sugirió cuando intentétar -zxv -f a.tgz -f b.tgz
- estamos todos ciegos y que es totalmente fácil de hacer - pero no pudimos encontrar ningún indicio en la web que no utilizan
for
ofind
oxargs
o similares.
No responda con tar -zxvf *.tar.gz
(porque eso no funciona) y solo responda con "no funciona" si está absolutamente seguro de ello (y tal vez tenga una buena explicación de por qué también).
Editar: me señalaron una respuesta a esta pregunta en Stack Overflow que dice en gran detalle que no es posible sin romper la tar
sintaxis actual , pero no creo que sea cierto. Usar tar -zxv -f a.tgz -f b.tgz
o tar -zxv --all-args-are-archives *.tar.gz
no rompería ninguna sintaxis existente, en mi humilde opinión.
-M
parámetro.Respuestas:
Esto es posible, la sintaxis es bastante fácil:
La opción -i ignora el EOF al final de los archivos tar, desde la página del manual:
fuente
cat *.tar.bz2 | tar -ixjv
. ¡Gracias!para * .tar.gz
para * .tar.bz2
para * .tar.xz
fuente
$file
si sus archivos tienen nombres con espacios.Necesitas usar un bucle. No rompería la
tar
sintaxis de la línea de comando para permitir múltiples-f
opciones, pero requeriría agregar código para procesar varios archivos en secuencia, con todo tipo de condiciones de borde (¿Qué sucede si un archivo en el medio está mal formado? ¿Pueden los archivos usar diferentes mecanismos de compresión? ¿Puede tener múltiples-C
opciones (opción GNU tar para extraer a un directorio en particular), también? ¿Qué pasa con -K (opción GNU tar para comenzar en un determinado nombre de miembro)? ...).Una posibilidad para evitar un
for
bucle es instalar y activar AVFS , un sistema de archivos FUSE que proporciona acceso transparente a los archivos. Cada archivo/path/to/archive
funciona como un directorio~/.avfs/path/to/archive#
. Si desea hacer coincidir los archivos con comodines, hay un obstáculo para agregar que#
a una coincidencia de comodines; Se puede hacer en zsh.fuente
find . -name "*.tar.gz" -exec tar xzf {} \;
fuente