Je pensais tar archive.tar /users/mylocation
devrait fonctionner, mais ce n'est pas le cas. Comment puis-je le faire ?
Le chemin d'accès peut-il être supprimé, c'est-à-dire qu'il suffit de récupérer le fichier ?
Je pensais tar archive.tar /users/mylocation
devrait fonctionner, mais ce n'est pas le cas. Comment puis-je le faire ?
Pour extraire une archive dans un répertoire différent du répertoire courant, utilisez la fonction -C
ou --directory
L'option 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éé par mkdir /target/directory
).
Lire l'article page de manuel (commande : man tar
) pour d'autres options.
Le chemin d'accès peut-il être supprimé, c'est-à-dire qu'il suffit de récupérer le fichier ?
S'il s'agit d'un fichier plus volumineux, lorsque vous exécutez la commande, vous n'obtenez aucune sortie pendant plusieurs secondes, voire plusieurs minutes, alors que la commande est en cours d'exécution. Vous pouvez résoudre ce problème en ajoutant l'option -v
drapeau ( mode verbeux ) qui liste le nom de chaque fichier au fur et à mesure qu'il l'extrait.
Si vous avez des problèmes avec cela, notez le --strip-components=1
les conseils de l'autre réponse également.
Merci. Les téléchargements via wget/etc ont toujours un répertoire "parent". C'est la réponse complète à mon avis - ou cela devrait être noté dans la réponse ci-dessus.
Juste ce que je cherchais. --strip-components
est très utile lorsque vous exécutez des provisionneurs qui peuvent utiliser des versions différentes. De cette façon /target/directory
peut être un nom générique, sans avoir à se soucier de la façon dont le fournisseur a choisi de nommer son dossier d'archives.
En combinant les réponses et les commentaires précédents :
Pour simplement extraire 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 aussi supprimer le répertoire racine (premier niveau) dans le zip
mkdir -p /target/directory && tar xf archive.tar -C /target/directory --strip-components=1
Vous pouvez ignorer la création du répertoire en ajoutant l'option --one-top-level=/target/directory
à la commande tar, et en supprimant l'option -C
option. Voir ce qui suit réponse
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 votre propre modèle 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 /tmp
mkdir folder
touch folder/file.txt
quand vous le faites tar -zcvf folder.tar.gz folder
tout est comme prévu = quand vous le déstarrez maintenant, il sera déstarré (le dossier sera créé, si vous l'avez supprimé) en tant que /tmp/folder/
.
Mais, quand vous créerez le goudron comme tar -zcvf tmp-folder.tar.gz /tmp/folder
et que vous le désarchivez dans le dossier /tmp, le résultat sera le suivant /tmp/tmp/folder
répertoire ! Dans ce cas, vous devez le déstarer vers / -. tar -xf tmp-folder.tar.gz -C /
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.
2 votes
Aussi,
-C, --directory DIR\n change to directory DIR
devrait plutôt être décrite commechange output directory to DIR (will fail if DIR doesn't exist)
. Merci @Mich. Voir aussi la réponse de @Bryan_Larsen.2 votes
@Ujjwal Sing : En effet, la page de manuel tar n'est pas très utile. Elle décrit "-C DIR" comme "change to directory DIR" . Pire encore : "tar -C mydir xf archive.tar" ne fonctionne pas, alors que "tar xf archive.tar -C mydir" fonctionne.
0 votes
@PatMorin Pour être juste, une fois que vous comprenez les conventions d'appel d'arguments que vous utilisez, cela a du sens. Vous pouvez également faire
tar xfC archive.tar mydir
otar -C mydir -xf archive.tar
. C'est seulement le mélange des drapeaux de style traditionnel et de style GNU qui casse les choses, comme... c'est honnêtement attendu. Les drapeaux traditionnels sont passés comme un seul blob en premier argument. Vous ne pouvez pas vous attendre à ce qu'ils fonctionnent s'ils ne sont pas les premiers. (Je veux dire, oui, il est possible de l'interpréter de toute façon - mon point de vue est que ce serait au-dessus et au-delà, pas standard).