Comment décompresser un tar.gz dans un autre répertoire

270

J'ai une archive

* .tar.gz

Comment puis-je décompresser cela dans un répertoire de destination?

Mercer
la source
9
Pourquoi tous les downvotes? Il y a plus d'options que juste -C (et peut-être que sa version ne le fournit pas).
Alfe
2
Stack Overflow est un site pour les questions de programmation et de développement. Cette question semble être hors sujet car elle ne concerne pas la programmation ou le développement. Voir Quels sujets puis-je poser ici dans le centre d'aide. Peut-être que Super User ou Unix & Linux Stack Exchange seraient un meilleur endroit pour demander.
jww
@jww Pendant que je vois votre point, nous avons également des balises nommées taret gzautour dans ce forum. Extraire une archive tar dans un répertoire spécifique peut très bien faire partie d'un script shell et donc faire partie de la programmation. Je suppose que ce genre de question peut alors être posée dans l'un ou l'autre forum.
Alfe

Réponses:

319

Vous pouvez utiliser l'option -C(ou --directorysi vous préférez les options longues) pour donner le répertoire cible de votre choix au cas où vous utilisez la version GNU de tar. Le répertoire doit exister:

mkdir foo
tar -xzf bar.tar.gz -C foo

Si vous n'utilisez pas un tarcapable d'extraire vers un répertoire spécifique, vous pouvez simplement cddans votre répertoire cible avant d'appeler tar; alors vous devrez bien sûr donner un chemin complet vers vos archives. Vous pouvez le faire dans un sous-shell de portée pour éviter d'influencer le script environnant:

mkdir foo
(cd foo; tar -xzf ../bar.tar.gz)  # instead of ../ you can use an absolute path as well

Ou, si ni un chemin absolu ni un chemin relatif vers le fichier d'archive ne convient, vous pouvez également l'utiliser pour nommer l'archive en dehors du sous-shell de portée:

TARGET_PATH=a/very/complex/path/which/might/even/be/absolute
mkdir -p "$TARGET_PATH"
(cd "$TARGET_PATH"; tar -xzf -) < bar.tar.gz
Alfe
la source
107
gzip -dc archive.tar.gz | tar -xf - -C /destination

ou, avec GNU tar

tar xzf archive.tar.gz -C /destination
Mercer
la source
3
J'aime la notion d'utilisation gzipau cas où le goudron ne comprend pas les archives zippées.
Alfe
4

Extrait myArchive.tar vers / destinationDirectory

Commandes:

cd /destinationDirectory
pax -rv -f myArchive.tar -s ',^/,,'
javaPlease42
la source
0

Vous pouvez utiliser la boucle for pour décompresser plusieurs fichiers .tar.gz dans un autre dossier. Le code suivant prendra / destination / dossier / chemin comme argument du script et décompactera tous les fichiers .tar.gz présents à l'emplacement actuel dans / destination / dossier / chemin.

if [ $# -ne 1 ];
 then
 echo "invalid argument/s"
 echo "Usage: ./script-file-name.sh /target/directory"
 exit 0
fi
for file in *.tar.gz
do
    tar -zxvf "$file" --directory $1
done
Rahul Shivalkar
la source