Aussi, -C, --directory DIR\n change to directory DIRdevrait plutôt être décrit comme change output directory to DIR (will fail if DIR doesn't exist). Merci @Mich. Voir aussi la réponse de @ Bryan_Larsen.
Valable le
1
@Ujjwal Sing: En effet, la page de manuel de tar n'est pas très utile. Il décrit "-C-DIR" comme "changer de répertoire DIR". Pire encore: "tar -C mydir xf archive.tar" ne fonctionne pas, alors que "tar xf archive.tar -C mydir" fonctionne.
Pat Morin
@ PatMorin Pour être juste, une fois que vous avez compris les conventions d'appel d'arguments que vous utilisez, cela a du sens. Vous pouvez aussi faire tar xfC archive.tar mydirou tar -C mydir -xf archive.tar. Ce n’est que le mélange de drapeaux de style traditionnel et de style GNU qui casse les choses, comme… est honnêtement prévu. Les drapeaux traditionnels sont tous passés comme 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)
Nic Hartley
Réponses:
958
Pour extraire une archive dans un répertoire différent de celui en cours, utilisez les options, -Cou --directory, tar, 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éé avec mkdir /target/directory).
Lisez la page de manuel (commande:) man tarpour d'autres options.
Le chemin peut-il être supprimé: il suffit de récupérer le fichier
zzapper
3
S'il s'agit d'un fichier plus volumineux, lorsque vous exécutez la commande, vous n'obtenez aucun résultat pendant plusieurs secondes, voire quelques minutes, pendant qu'il fonctionne. Vous pouvez résoudre ce problème en ajoutant le -vdrapeau ( mode détaillé ) qui répertorie le nom de chaque fichier au fur et à mesure de son extraction.
IQAndreas
Si vous rencontrez des problèmes avec cela, notez également le --strip-components=1conseil de l'autre réponse.
N'est-il pas étonnant qu'après toutes ces années, avec toutes les options qui se tarsont accumulées, il n'y ait toujours pas d'option pour créer le répertoire de sortie s'il n'existe pas ?
EM0
261
Notez que si votre archive contient déjà un nom de répertoire que vous souhaitez modifier, ajoutez l’ --strip-components=1option suivante:
tar xf archive.tar -C /target/directory --strip-components=1
Je vous remercie. Les téléchargements via wget / etc ont toujours un répertoire "parent". Ceci est la réponse complète imo - ou devrait être noté dans la réponse ci-dessus.
bshea
Exactement ce que je cherchais. --strip-componentsest si utile lors de l'exécution de fournisseurs qui peuvent utiliser différentes versions. De cette façon, il /target/directorypeut s’agir d’un nom générique, sans avoir à s’inquiéter de la façon dont le fournisseur a choisi de nommer son dossier d’archive.
Jack_Hu
30
Combinaison des réponses précédentes et des commentaires:
Pour extraire simplement le contenu et créer un 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
J'utilise GNU tar 1.26 et j'obtiens une erreur d'option non reconnue pour--one-top-level
Emma Strubell
C'est la réponse dont j'avais besoin. Très utile "pas" pour avoir à spécifier le nom du répertoire, ou à retenir un code spécial qui fera référence au fichier pour le nom. Je vous remercie.
Hypocrite
2
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 /tmp
mkdir folder
touch folder/file.txt
quand vous faites tar -zcvf folder.tar.gz foldertout est comme prévu = lorsque vous le décompressez maintenant, il sera décompressé (le dossier sera créé, si vous l'avez supprimé) comme /tmp/folder/.
Mais, lorsque vous créerez tar en le tar -zcvf tmp-folder.tar.gz /tmp/folderdésarchivant dans le dossier / tmp, le résultat sera /tmp/tmp/folderrépertoire! Dans ce cas, vous devez le décompresser pour / -tar -xf tmp-folder.tar.gz -C /
-C, --directory DIR\n change to directory DIR
devrait plutôt être décrit commechange output directory to DIR (will fail if DIR doesn't exist)
. Merci @Mich. Voir aussi la réponse de @ Bryan_Larsen.tar xfC archive.tar mydir
outar -C mydir -xf archive.tar
. Ce n’est que le mélange de drapeaux de style traditionnel et de style GNU qui casse les choses, comme… est honnêtement prévu. Les drapeaux traditionnels sont tous passés comme 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)Réponses:
Pour extraire une archive dans un répertoire différent de celui en cours, utilisez les options,
-C
ou--directory
, tar, comme dansNotez que le répertoire cible doit exister avant d'exécuter cette commande (il peut être créé avec
mkdir /target/directory
).Lisez la page de manuel (commande:)
man tar
pour d'autres options.la source
-v
drapeau ( mode détaillé ) qui répertorie le nom de chaque fichier au fur et à mesure de son extraction.--strip-components=1
conseil de l'autre réponse.tar
sont accumulées, il n'y ait toujours pas d'option pour créer le répertoire de sortie s'il n'existe pas ?Notez que si votre archive contient déjà un nom de répertoire que vous souhaitez modifier, ajoutez l’
--strip-components=1
option suivante:la source
--strip-components
est si utile lors de l'exécution de fournisseurs qui peuvent utiliser différentes versions. De cette façon, il/target/directory
peut s’agir d’un nom générique, sans avoir à s’inquiéter de la façon dont le fournisseur a choisi de nommer son dossier d’archive.Combinaison des réponses précédentes et des commentaires:
Pour extraire simplement le contenu et créer un répertoire cible s'il est manquant:
Pour extraire et également supprimer le répertoire racine (premier niveau) dans le zip
la source
Une autre option consiste à utiliser --one-top-level. Cela créera automatiquement un répertoire basé sur le nom de fichier de l'original.
De plus, si vous le souhaitez, vous pouvez spécifier le vôtre et tar le créera automatiquement.
la source
--one-top-level
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
quand vous faites
tar -zcvf folder.tar.gz folder
tout est comme prévu = lorsque vous le décompressez maintenant, il sera décompressé (le dossier sera créé, si vous l'avez supprimé) comme/tmp/folder/
.Mais, lorsque vous créerez tar en le
tar -zcvf tmp-folder.tar.gz /tmp/folder
désarchivant dans le dossier / tmp, le résultat sera/tmp/tmp/folder
répertoire! Dans ce cas, vous devez le décompresser pour / -tar -xf tmp-folder.tar.gz -C /
la source
Avec tar 1.29, nous pouvons simplement ajouter le nom du répertoire après le nom du fichier tar. Par exemple,
la source