Je pensais tar archive.tar /users/mylocation
ça marcherait, mais ce n'est pas le cas. Comment puis-je faire ça?
Pour extraire une archive dans un répertoire différent de celui en cours, utilisez la commande -C
, ou --directory
, option goudron, comme dans
tar -xf archive.tar -C /target/directory
Notez que le répertoire cible doit exister avant d'exécuter cette commande (il peut être créé par mkdir /target/directory
).
Lire le page de manuel (commande: man tar
) pour d'autres options.
Notez que si votre archive contient déjà un nom de répertoire que vous souhaitez modifier, ajoutez le --strip-components=1
option:
tar xf archive.tar -C /target/directory --strip-components=1
Combinaison des réponses et commentaires précédents:
Pour extraire simplement le contenu et créer le répertoire cible s'il est manquant:
mkdir -p /target/directory && tar xf archive.tar -C /target/directory
Pour extraire et également supprimer le répertoire racine (premier niveau) dans le zip
mkdir -p /target/directory && tar xf archive.tar -C /target/directory --strip-components=1
Une autre option consiste à utiliser --one-top-level. Cela créera automatiquement un répertoire basé sur le nom de fichier de l'original.
tar zxvf filename.tgz --one-top-level
De plus, si vous le souhaitez, vous pouvez spécifier le vôtre et tar le créera automatiquement.
tar zxvf filename.tgz --one-top-level=new_directory
Ce que j'ai trouvé intéressant par rapport à l'extraction, c'est que cela dépend de la façon dont vous avez créé l'archive, voir cet exemple
cd /tmpmkdir foldertouch folder/file.txt
quand tu fais tar -zcvf folder.tar.gz folder
tout est comme prévu = lorsque vous le décompressez maintenant, il ne sera pas démarré (le dossier sera créé, si vous l'avez supprimé) comme /tmp/folder/
.
Mais, quand vous allez créer du goudron comme tar -zcvf tmp-folder.tar.gz /tmp/folder
et vous le décompressez dans le dossier / tmp, le résultat sera /tmp/tmp/folder
annuaire ! Dans un tel cas, vous devez le détacher pour / - tar -xf tmp-folder.tar.gz -C /
@Ujjwal Sing: En effet, la page de manuel tar n’est pas très utile. Il décrit "- C DIR " comme “changer en répertoire DIR”. Pire encore: "archive tar-C mydir xf.tar “ne fonctionne pas, tandis que” tar xf archive.tar-C mydir " le fait.
De plus, - C ,change directory DIR\n change to directory DIR ' devrait plutôt être décrit comme
change output directory to DIR (échouera si DIR n’existe pas)`. Merci @Mich. Voir aussi la réponse de @Bryan_Larsen.
@PatMorin Pour être juste, une fois que vous comprenez les conventions d’appel d’argument que vous utilisez, cela a du sens. Vous pouvez également faire des archives ’ tar xfC.tar mydirou
tar-C mydir-archive xf.tar`. C’est seulement le mélange de drapeaux de style traditionnel et de style GNU qui casse les choses, comme… est honnêtement un peu attendu. Les drapeaux traditionnels sont passés en un seul blob comme premier argument. Vous ne pouvez pas vous attendre à ce qu’ils travaillent s’ils ne sont pas les premiers. (Je veux dire, oui, il est possible de l’interpréter de toute façon – mon point est que ce serait au-dessus et au-delà, pas standard)