web-dev-qa-db-fra.com

Décompressez le contenu du fichier, mais sans créer de dossier d'archive

J'ai un fichier myarchive.Zip qui contient de nombreux répertoires, fichiers, etc. Supposons que ce fichier myarchive.Zip se trouve dans un répertoire appelé "b". Eh bien, lorsque j'utilise la commande "décompressez myarchive.Zip", le système crée par défaut un répertoire appelé "myarchive" avec le contenu du fichier Zip. Je veux pas que le système crée ce répertoire "myarchive" - ​​je veux juste que le contenu soit extrait dans le répertoire "b". Est-ce possible?

Ce que je fais maintenant, c'est simplement de lancer une commande "cp" pour copier les fichiers du répertoire nouvellement créé (dans ce cas "myarchive" vers "b") là où je les veux.

42
ScoobaSteve

Ma version de unzip a un -j option pour ne créer aucun répertoire.

Donc

unzip -j /path/to/file.Zip

Extrayera tous les fichiers dans le répertoire courant sans restaurer la structure de répertoires stockée dans le fichier Zip.

Si vous souhaitez supprimer un seul niveau de répertoires de l'archive, (extrayez myarchive/dir/file comme dir/file, pas file), vous pouvez utiliser à la place bsdtar (qui prend en charge les fichiers Zip en plus des fichiers tar) et son -s option.

bsdtar -xf /path/to/file.Zip -s'|[^/]*/||'
51
Stéphane Chazelas

On dirait que c'est vraiment simple avec bsdtar :

bsdtar --strip-components=1 -xvf file.Zip

3
ismail

Ce que la réponse acceptée ne spécifie pas comment faire, comme vous le dites dans la question, si vous souhaitez toujours extraire vers un dossier spécifique sans utiliser les chemins d'accès aux dossiers stockés dans les fichiers Zip, vous pouvez utiliser le -j option avec -d option de cette façon:

unzip -j /path/to/file.Zip -d other_folder

ou pour votre cas

unzip -j myarchive.Zip -d b
2
Eduard Florinescu