Lorsque vous écrivez :
tar -xf *.gz
le tar
commande voit (par exemple) :
tar -xf abc.tar.gz def.tar.gz ghi.tar.gz
Ceci est interprété comme une demande d'extraction de def.tar.gz
et ghi.tar.gz
de l'archive abc.tar.gz
. Comme les fichiers ne s'y trouvent pas, vous obtenez le message d'avertissement.
En d'autres termes, tar
fonctionne sur un seul tar
fichier (éventuellement compressé) à la fois (en une seule invocation). Il ne fonctionne pas sur plusieurs fichiers tar.
Notez que si abc.tar.gz
contient un fichier pqr/xyz/important.c
, vous pouvez extraire un seul fichier en spécifiant :
tar -xf abc.tar.gz pqr/xyz/important.c
La notation que vous avez utilisée n'est qu'une variante de cette notation.
(Et oui, il peut y avoir des raisons de tar
un tar
dossier. Par exemple, Gmail ne vous permet pas d'expédier un fichier tar ou un fichier tar compressé contenant un fichier exécutable. Cependant, si vous intégrez un fichier tar compressé à l'intérieur d'un fichier tar non compressé, il ne regarde pas à l'intérieur du fichier interne pour trouver le fichier exécutable. Je l'utilise quand j'ai besoin d'expédier un fichier tar avec un exécutable configure
script.)
la raison principale est tar
prend un seul argument de nom de fichier. Lorsque vous appelez le tar *.tgz
bash étend le *
à tous les noms de fichiers avec le formant tgz et cela devient tar file1 file2 file3
qui n'est pas accepté par tar
. Donc soit vous utilisez une boucle for comme for i in *.tgz; do tar -zxvf $i ;done
ou utilisez une autre commande qui exécute tar
comme effet secondaire comme indiqué dans les commentaires, est ls
ou find . -maxdepth 1 -name \*tgz -exec tar -zxvf {} \;
(ls
la sortie est toujours risquée)
Lorsque vous écrivez
tar -xzf *.gz
votre shell le développe en chaîne :
tar -xzf 1.gz 2.gz 3.gz
(en supposant que 1.gz, 2.gz et 3.gz sont dans votre répertoire actuel).
tar
pense que vous voulez extraire 2.gz
et 3.gz
à partir de 1.gz
; il ne peut pas trouver ces fichiers dans les archives et cela provoque le message d'erreur.
Vous devez utiliser la boucle for
de la commande xargs
pour extraire vos fichiers.
ls *.gz |xargs -n1 tar -xzf
Cela signifie :exécutez-moi tar -xzf
pour chaque gz
-file dans le répertoire courant.