60 votes

Zip d'une archive sans inclure le répertoire parent

Je veux zipper plusieurs dossiers dans une arborescence de répertoires, comme suit

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

Lorsque j'essaie de le compresser, il finit par créer une archive zip avec le dossier v au lieu de son contenu (les sous-répertoires et les fichiers).

Comment puis-je éviter cela ?

47voto

robrtsql Points 603

Utilisez le -j ou --junk-paths dans votre commande zip.

De la page de manuel de 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).

36voto

jspaetzel Points 520

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

Ejemplo:

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

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

Vous pourriez vous rendre dans le répertoire /test/ puis exécuter quelque chose comme,

zip -r filename.zip ./*

Ce qui créerait une archive dans le même dossier nommée nomfichier.zip. Ou si vous l'exécutez depuis l'extérieur du dossier, vous pouvez exécuter,

zip -r test.zip test/*

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

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

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

36voto

Kenneth Points 461

J'espère que cela vous aidera.

(cd directory && zip -r ../out.zip .)

Elle garde la Shell principale dans le même répertoire et ne change que le répertoire de la sous-Shell qui meurt après la commande.

29voto

aluc Points 399

Que pensez-vous de cette commande ?

$ cd somedir ; zip -r ../zipped.zip . * ; cd ..

4voto

Glech Points 141
cd `dirname path/to/archive` && zip -rq $OLDPWD/arhive.zip . && cd -

Cela fonctionne non seulement avec l'arbre flatten (comme -j ) et vous pouvez spécifier n'importe quel répertoire (pas seulement les enfants).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X