Bonjour,
malgré mes recherches sur le man je n'arrive pas à trouver la syntaxe pour connaitre le nom du dossier une fois l'archive décompressée.
MerciCode:tar -xvzf script.tar.gz
Version imprimable
Bonjour,
malgré mes recherches sur le man je n'arrive pas à trouver la syntaxe pour connaitre le nom du dossier une fois l'archive décompressée.
MerciCode:tar -xvzf script.tar.gz
tar -tvzf script.tar.gz affiche le contenu de l'archive
peut être en pipant dans un cut ou un grep tu extraieras ton bonheur.
Le problème, c'est que tu peux avoir 0 ou plusieurs répertoires dans la même archive tar.
C'est à dire 8O ... je débute en shell !!!Citation:
tar -tvzf script.tar.gz affiche le contenu de l'archive
peut être en pipant dans un cut ou un grep tu extraieras ton bonheur.
Peu importe se que je veux c'est le premier dossier.Citation:
Le problème, c'est que tu peux avoir 0 ou plusieurs répertoires dans la même archive tar.
Merci
dans cet exemple le pipe "|" sert à dire à awk d'interpreter l'affichage renvoyé par tar pour faire simple ...Code:
1
2
3
4
5
6
7
8 $ tar czf t.tar.gz Scripts/ $ tar tzvf t.tar.gz | awk '{print $9}' Scripts Scripts/Test Scripts/Valid Scripts/mdump.sh Scripts/startpsql $
donc si tu veux QUE les repertoires contenus à la racine de l'archive il suffit d'éliminer de l'affichage les fichiers contenus par ces derniers par exemple avec :
tres concrétement dans cet exemple même principe :Code:
1
2
3
4
5
6
7 $ tar zcf t.tar.gz GNUstep/ Scripts/ Freemind/ $ tar tzvf t.tar.gz | sed "/\//d;s/.*:[0-9][0-9]//" GNUstep Scripts Freemind $
le "|" dit à sed de travailler sur l'affichage envoyé par tar.
quand à sed :
/\//d : toute ligne contenant au moins un "/" = delete
substitute "n'importe:chiffrechiffre" par "" (autrement dit ne garder que le nom du repertoire et pas son heure de creation proprietaire ou droits
ce qui te donne donc les noms de tous les repertoires à la racine de l'archive ....
si tu veux que le premier tu peux piper avec head -1 (1 = 1 ligne)
si tu veux que le dernier tu peux piper avec tail -1
sed c'est très puissant mais pas facile à utiliser au débutCode:
1
2
3
4
5 $ tar tzvf t.tar.gz | sed "/\//d;s/.*:[0-9][0-9]//"| tail -1 Freemind $ tar tzvf t.tar.gz | sed "/\//d;s/.*:[0-9][0-9]//"| head -1 GNUstep $
tu peux aussi utiliser awk comme indiqué plus haut
ou print $9 peut etre interprété comme selectionner la 9ieme colonneCode:
1
2
3 $ tar tzvf t.tar.gz | awk '{print $9}' | head -1 GNUstep $
bref la notion à comprendre est que | travaille sur le resultat affiché de la commande à sa gauche et non pas sur son résultat fonctionnel.
après tu apprendras les commandes petit à petit.
Merci pour tes explications mais en effet c'est chaud à comprendre !!! Voilà la solution que j'ai trouvé :
Je cherche à récupérer le 1er dossier commençant par "arch" dans l'archive "archive.tar.gz"Code:
1
2 tar xvzf archive.tar.gz nom_dossier=$(find /home/user/archive.tar.gz -maxdepth 1 -type d -name "arch*" -print )
Merci pour ton aide
Heu là, cela me parait brutal. Tu va décompresser ton archive en réel et faire un find dedans ?
Il est probable que l'on puisse faire la même chose sans d'archiver.
La réponse se situe dans une commande un peu comme celle ci (je n'ai pas de Linux sous la main pour t'aider plus) :
Code:tar -tvzf <archive.tar.gz> | grep arch | awk '{print $1 }'
C'est tout à fait cela, je souhaite connaitre le nom du dossier qui contient mon archive décompresserCitation:
Envoyé par ram-0000
Bonjour,
Soucis : si tu as un fichier qui se nomme *arch* avant ton répertoire, ca te donne le nom du fichier, et pas le nom du dossier.Code:tar -tvzf archive.tar.gz | grep arch | head -1
Peut-être peut-on être plus rigoureux en utilisant basename en plus, mais je pense que c'est se compliquer la vie pour pas grand chose.