web-dev-qa-db-fra.com

décompressez filename.tr.gz dans le répertoire "filename"

Je voudrais décompresser une archive par ex. "tar123.tar.gz" dans le répertoire/myunzip/tar123/"à l'aide d'une commande Shell.

tar -xf tar123.tar.gz décompressera les fichiers mais dans le même répertoire que celui dans lequel je travaille.

Si le nom de fichier était "tar233.tar.gz", je veux qu'il soit décompressé dans /myunzip/tar233.tar.gz ", le répertoire de destination serait donc basé sur le nom de fichier.

Est-ce que quelqu'un sait si la commande tar peut le faire?

32
Jorre

Avec Bash et GNU tar:

file=tar123.tar.gz
dir=/myunzip/${file%.tar.gz}
mkdir -p $dir
tar -C $dir -xzf $file
33
Randy Proctor
tar -xzvf filename.tar.gz -C destination_directory
34
Jorg B Jorge

Vous pouvez changer de répertoire avant d'extraire avec le -C flag, mais le répertoire doit déjà exister. (Si vous créez des répertoires spécifiques à un fichier, je vous déconseille fortement de les appeler foo.tar.gz - l'extension implique qu'il s'agit d'un fichier d'archive mais qu'il s'agit en fait d'un répertoire. Cela va conduire à la confusion.)

4
Kilian Foth

Essayer

file=tar123.tar.gz
dir=/myunzip/$(basename $file .tar.gz)   # matter of taste and custom here
[ -d "$dir" ] && { echo "$dir already exists" >&2; exit 1; }
mkdir "$dir" && ( gzip -d "$file | ( cd "$dir" && tar xf - ) )

Si vous utilisez GNU tar, vous pouvez également lui donner une option -C "$dir" ce qui entraînera son changement dans le répertoire avant l'extraction. Mais le code ci-dessus devrait fonctionner même avec un goudron de l'âge du bronze.

Avertissement: aucun des codes ci-dessus n'a été testé.

2
Norman Ramsey