Zip tous les files dans le directory?

Existe-t-il un moyen de zipper tous les files dans un directory donné avec la command zip ? J'ai entendu parler de *.* , Mais je veux que ça marche aussi pour les files sans extension.

Vous pouvez simplement utiliser * ; il n'y a pas besoin de *.* . Les extensions de file ne sont pas spéciales sur Unix. * correspond à zéro ou plusieurs caractères, y compris un point. Donc, il correspond à foo.png , parce que c'est zéro ou plusieurs caractères (sept, pour être exact).

Notez que * par défaut ne correspond pas aux files commençant par un point (pas plus que *.* ). C'est souvent ce que vous voulez. Sinon, dans bash, si vous shopt -s dotglob il le sera (mais sera toujours exclure . Et .. ). Les autres shells ont des manières différentes (ou pas du tout) d'inclure des files dotfiles.

Alternativement, zip également une option -r (récursive) pour faire des arborescences de directorys entières à la fois (et ne pas avoir à vous soucier du problème de file dot):

 zip -r myfiles.zip mydir 

mydir est le directory contenant vos files. Notez que le zip produit contiendra la structure du directory ainsi que les files. Comme le souligne peterph dans son commentaire, cela est généralement considéré comme une bonne chose: l'extraction du zip stockera soigneusement tous les files extraits dans un sous-directory.

Vous pouvez également indiquer à zip de ne pas stocker les paths avec l'option -j / --junk-paths .

La command zip est accompagnée d'une documentation vous informant de toutes ses (nombreuses) options; tapez man zip pour voir cette documentation. Ce n'est pas unique à zip; vous pouvez get la documentation pour la plupart des commands de cette façon.

Un autre moyen serait d'utiliser find et xargs: (cela pourrait inclure un directory "." Dans le zip, mais il devrait encore extraire correctement find . -type f -exec zip zipfile.zip {} + find . -type f -exec zip zipfile.zip {} +

(Le + peut être remplacé par \; si votre version de find ne supporte pas le + end pour exec, il sera plus lent …)

Cela inclura par défaut tous les sous-directorys. Sur GNU find -maxdepth peut empêcher cela.

Dans mon cas, je voulais zip chaque file dans sa propre archive, donc j'ai fait ce qui suit (dans zsh ):

 $ for file in *; do zip ${file%.*}.zip $file; done 

La command permettant de zipper tous les files dans un directory:

 zip -r <filename.zip> <directory> 

Exemple:

 zip -r mydata.zip mydata 

OU

 zip -r mydata.zip mydata/* 

r est pour zip le directory récursivement.