J'ai un fichier zip comme myArchive123.tar.gz
. À l'intérieur, il contient un dossier commehelloWorld
Si je l'extrait: tar -xf myArchive123.tar.gz
j'obtiens le helloWorld
dossier:
ls
myArchive123.tar.gz
helloWorld
Je voudrais que la sortie soit du même nom que le nom de fichier moins l'extension .tar.gz. C'est à dire:
tar <magic paramaters> myArchive123.tar.gz
ls
myArchive123.tar.gz
myArchive123
cd myArchive123
ls
helloWorld
Cela peut-il être fait?
- Je ne sais jamais ce qu'il y a dans l'archive. Il pourrait s'agir d'un dossier, de nombreux fichiers.
- Je serais d'accord avec l'utilisation d'un autre outil si tar ne peut pas le faire.
- Je serais d'accord avec un formulaire plus long qui peut être transformé en script
EDIT
Pendant ce temps, je me suis piraté un script qui semble faire le travail. (voir ma réponse postée ci-dessous). Si cela peut être amélioré, n'hésitez pas à poster des commentaires / réponses supplémentaires. L'essentiel est qu'il devrait être emballable dans une seule ligne comme:
extract <file>
Réponses:
Avec
gnu tar
, vous pouvez utiliser--xform
(ou--transform
) pour ajouter/prefix/
à chaque nom de fichier:Note il n'y a pas de leader
/
dansprefix/
et lessed
extrémités d'expression avecS
pour exclure les cibles de liens symboliques de transformations de nom de fichier.Pour le tester (essai à sec):
Pour commencer, voici un script très simpliste que vous pourriez invoquer comme
extract <file>
:la source
Eh bien, vous pouvez le faire en quelques étapes au moins. Si tu l'as fait
cela permettrait d'accomplir la tâche, même s'il existe peut-être une réponse plus compacte.
la source
Éditer
La réponse acceptée est plus courte que celle ci-dessous. (faites la même chose, mais plus court est généralement mieux).
J'ai finalement piraté un script pour la tâche à accomplir. il fonctionne avec .tar .tar.gz et .gz
Usage:
Remarque, cette solution est capable de points dans un nom de fichier. Par exemple Eclipse-4.5M-SDK.tar.gz.
Je garde le script dans mon dépôt git. Pour la dernière version, voir: https://github.com/LeoUfimtsev/ldts/blob/master/pathscripts/leo-tar-here
la source
Une autre solution possible consiste à utiliser l'
--transform
option:Avec vos fichiers:
la source
--strip-components=0
supprime simplement le premier nom de répertoire du chemin et avec l'-C
option stocke les fichiers désarchivés dans le nouveau répertoire.