Cuando escribes:
tar -xf *.gz
el tar
el comando ve (por ejemplo):
tar -xf abc.tar.gz def.tar.gz ghi.tar.gz
Esto se interpreta como una solicitud para extraer def.tar.gz
y ghi.tar.gz
del archivo abc.tar.gz
. Dado que los archivos no están allí, aparece el mensaje de advertencia.
En otras palabras, tar
opera en un único tar
archivo (posiblemente comprimido) a la vez (en una invocación). No funciona en varios archivos tar.
Tenga en cuenta que si abc.tar.gz
contiene un archivo pqr/xyz/important.c
, puede extraer solo un archivo especificando:
tar -xf abc.tar.gz pqr/xyz/important.c
La notación que usó es solo una variante de esta notación.
(Y sí, puede haber razones para tar
un tar
expediente. Por ejemplo, Gmail no le permite enviar un archivo tar o un archivo tar comprimido con gzip que contenga un archivo ejecutable. Sin embargo, si incrusta un archivo tar comprimido con gzip dentro de un archivo tar no comprimido, no busca dentro del archivo interno para encontrar el archivo ejecutable. Lo uso cuando necesito enviar un archivo tar con un ejecutable configure
guión.)
la razón principal es tar
toma un solo argumento de nombre de archivo. Cuando llamas al tar *.tgz
bash extiende el *
a todos los nombres de archivo con formato tgz y se convierte en tar file1 file2 file3
que no es aceptado por tar
. Entonces, o usas un bucle for como for i in *.tgz; do tar -zxvf $i ;done
o use algún otro comando que ejecute tar
como efecto secundario como se muestra en los comentarios, es ls
o find . -maxdepth 1 -name \*tgz -exec tar -zxvf {} \;
(ls
la salida siempre es arriesgada)
Cuando escribes
tar -xzf *.gz
su caparazón lo expande a la cadena:
tar -xzf 1.gz 2.gz 3.gz
(suponiendo que 1.gz, 2.gz y 3.gz estén en su directorio actual).
tar
piensa que quieres extraer 2.gz
y 3.gz
de 1.gz
; no puede encontrar estos archivos en los archivos comprimidos y eso provoca el mensaje de error.
Necesitas usar el bucle for
del comando xargs
para extraer sus archivos.
ls *.gz |xargs -n1 tar -xzf
Eso significa:ejecútame tar -xzf
por cada gz
-archivo en el directorio actual.