Comment extraire avec tar dans un autre répertoire?

18

Cela ne fonctionne pas:

tar xf /tmp/foo.tar.gz foo/bar
tar: foo/bar: Not found in archive

Ce n'est pas évident pour moi ce qui ferait cela au-delà de l'extraction en place et du déplacement des fichiers.

Kit Sunde
la source

Réponses:

28

De man tar:

     -C directory
         In c and r mode, this changes the directory before adding the
         following files.  In x mode, change directories after opening the
         archive but before extracting entries from the archive.

c'est-à-dire, tar xC /foo/bar -f /tmp/foo.tar.gzdevrait faire le travail. (sur FreeBSD, mais le tar GNU est fondamentalement le même à cet égard, voir "Changer le répertoire de travail" dans son manuel )

sr_
la source
4
Je recommande de tester ce comportement avec des versions non GNU de tar . La page de manuel Solaris ne mentionne cette option qu'en combinaison avec des opérations d' ajout et de remplacement . Curieux, je l'ai testé avec une opération d' extrait . Solaris de goudron n'a pas émis d'erreur ou d' avertissement et extrait l'archive dans le dossier en cours =: - /
KTF
1
Ne fonctionne pas non plus sur la version AIX de tar: 'Fichier -C non présent dans l'archive' - le '-C' fonctionne pour créer des tarballs.
DarkHeart
Est-il possible d'échanger le répertoire principal avec un nouveau nom?
tofutim
9

si vous voulez extraire une archive tar ailleurs, cd dans le répertoire de destination et décompressez-la là:

 mkdir -p foo/bar
 cd foo/bar
 tar xzvf /tmp/foo.tar.gz

La commande que vous avez utilisée rechercherait le fichier foo/bardans l'archive et l'extrait.

ktf
la source
9

Faire:

(cd foo/bar ; tar xf /tmp/foo.tar.gz )

ferait le travail.

Fondamentalement, ce qui se produit est de générer un nouveau shell (les parenthèses), dans ce sous-shell, changez de répertoire foo/baret décompressez le fichier.

Vous pouvez modifier le ;par un &&pour être sûr que tout cdfonctionne bien.

jfg956
la source
1
Wow que vous pouvez démarrer un shell comme ça, c'est plutôt cool! Je ne savais pas que tu pouvais faire ça.
Kit Sunde du
0
tar -xf ancd.tar.gz my/name/file

vous pouvez donner un nom de fichier avec le ./filefichier après tar.

tar -xf ancd.tar.gz ./my/name/file

s'il fonctionne, cela signifie que vous avez créé un tar avec ./. utilisez moins de commande pour voir le contenu tar.

less ...tar.file  
user2761565
la source
0

J'ai rencontré ce qui semble être un problème similaire et je l'ai résolu.

Le problème était dans la création du fichier plutôt que dans le fichier créé.

Lors de la tentative de tarage et de transfert d'un fichier dans le répertoire A, j'ai fourni le chemin d'accès au fichier d'origine dans la commande tar

tar -cvf MyFile.tar /foo/bar/dir/not/needed/path/*

Ce que j'ai pu résoudre, c'est

cd /foo/bar/dir/not/needed/
tar -cvf /tmp/MyFile.tar path*

Lors du transfert et de l'extraction de l'archive tar, les sous-répertoires requis sont créés.

tar -xvf MyFile.tar
OtisM
la source
0

Modifiez le répertoire dans lequel vous souhaitez extraire

cd /u02/restore

si l'emplacement du fichier d'extraction sous /u01/backup.tar alors

Extrayez comme suit:

cd /u02/restore
tar -xvf /u01/backup.tar
Teja
la source
0

La commande:

tar -xzvf foo.tar.gz -C /home/user/bar/

va extraire le fichier d'entrée "foo.tar.gz", dans le répertoire /home/user/bar, tout en imprimant les fichiers traités.

tzabal
la source