web-dev-qa-db-fra.com

Compresser une archive sans inclure le répertoire parent

Je veux compresser plusieurs dossiers dans une arborescence de répertoires comme

V-
 something.txt
 folder
 folder
 g.jpg
 h.jar

Lorsque j'essaie de le compresser, il finit de créer une archive Zip avec le dossier v à la place de son contenu (sous-répertoires et fichiers).

Comment puis-je éviter ça?

24
Dami

Donc, si je comprends bien, vous essayez d’archiver les fichiers et dossiers d’un dossier particulier, mais sans inclure le dossier racine.

Exemple:

/test/test.txt
/test/test2.txt

où test.txt et test2.txt seraient stockés dans le zip, mais pas/test /

Vous pouvez aller dans le répertoire/test/puis lancer quelque chose comme:

Zip -r filename.Zip ./*

Ce qui créerait une archive dans le même dossier nommé filename.Zip. Ou si vous l'exécutez en dehors du dossier, vous pouvez l'exécuter,

Zip -r test.Zip test/*

Le/* est la partie qui comprend uniquement le contenu du dossier, au lieu du dossier entier.

Edit: OP voulait plusieurs zips, la solution a fini par être un peu un bidouillage, je suis curieux de savoir s'il existe une meilleure façon de le faire.

for d in */ ; do base=$(basename "$d") ; cd $base ; Zip -r $base * ; mv "${base}.Zip" .. ; cd .. ; done;
21
zzbomb

Utilisez l'option -j ou --junk-paths dans votre commande Zip.

Depuis le page de manuel Zip :

-j

--junk-paths

Store just the name of a saved file (junk the path), and do not store directory 
names. By default, Zip will store the full path (relative to the current 
directory).
18
robrtsql

Que diriez-vous de cette commande?

$ cd somedir ; Zip -r ../zipped.Zip . * ; cd ..
16
Alfred UC