Je me demandais s'il était possible (et bien entendu, comment) tar
d'extraire plusieurs fichiers en une seule fois.
Je suis un utilisateur Unix expérimenté depuis plusieurs années et, bien sûr, je sais que vous pouvez utiliser for
un find
ou plusieurs éléments de ce type pour appeler tar
une fois pour chaque archive que vous souhaitez extraire, mais je ne pouvais pas créer de ligne de commande fonctionnelle qui aurait causé mon erreur. tar
extraire deux fichiers .tar.gz à la fois. (Et non, il n'y a rien de mal avec for
, je demande simplement s'il est possible de s'en passer.)
Je pose cette question plutôt par curiosité, peut-être
- il y a une étrange fourche de
tar
quelque part qui prend en charge cette - quelqu'un sait comment utiliser le
-M
paramètre quitar
m'a suggéré quand j'ai essayétar -zxv -f a.tgz -f b.tgz
- nous sommes tous aveugles et il est tout à fait facile à faire - mais je ne pouvais pas trouver un indice dans le Web qui n'a pas utilisé
for
oufind
ouxargs
ou similaires.
S'il vous plaît ne répondez pas avec tar -zxvf *.tar.gz
(parce que cela ne fonctionne pas ) et répondez seulement avec "ne fonctionne pas" si vous en êtes absolument sûr (et peut-être une bonne explication pourquoi ).
Edit: On m'a signalé une réponse à cette question sur Stack Overflow, qui indique de manière très détaillée que ce n'est pas possible sans casser la tar
syntaxe actuelle , mais je ne pense pas que ce soit le cas. Utiliser tar -zxv -f a.tgz -f b.tgz
ou tar -zxv --all-args-are-archives *.tar.gz
ne casserait aucune syntaxe existante, à mon humble avis.
-M
paramètre.Réponses:
C'est possible, la syntaxe est assez simple:
L'option -i ignore le fichier EOF situé à la fin des archives du fichier tar, à partir de la page de manuel:
la source
cat *.tar.bz2 | tar -ixjv
. Merci!pour * .tar.gz
pour * .tar.bz2
pour * .tar.xz
la source
$file
si vos fichiers ont des noms avec des espaces.Vous devez utiliser une boucle. Cela n'empêcherait pas la
tar
syntaxe de ligne de commande de permettre plusieurs-f
options, mais il faudrait ajouter du code pour traiter plusieurs archives en séquence, avec toutes sortes de conditions de bord (Que se passe-t-il si une archive au milieu est mal formée? Les archives peuvent-elles utiliser différentes Vous pouvez également disposer de plusieurs-C
options (option GNU tar à extraire dans un répertoire particulier)? Qu'en est-il de -K (option GNU tar à partir d'un certain nom de membre)?…).Une possibilité d'éviter une
for
boucle consiste à installer et à activer AVFS , un système de fichiers FUSE offrant un accès transparent aux archives. Chaque archive/path/to/archive
sert également de répertoire~/.avfs/path/to/archive#
. Si vous souhaitez faire correspondre les archives avec des caractères génériques, il est difficile de l'ajouter#
à une correspondance générique; cela peut être fait en zsh.la source
find . -name "*.tar.gz" -exec tar xzf {} \;
la source