Détails
Zip tous les fichiers dans le répertoire ?
Existe-t-il un moyen de compresser tous les fichiers d'un répertoire donné avec la commande zip
? J'ai entendu parler de l'utilisation de *.*
, mais je voudrais que cela fonctionne aussi pour les fichiers sans extension.
487
3
Vous pouvez simplement utiliser
*
; il n'y a pas besoin de*.*
. Les extensions de fichiers ne sont pas spéciales sous Unix.*
correspond à zéro caractère ou plus, y compris un point. Il correspond donc àfoo.png
, parce que c'est zéro caractère ou plus (sept, pour être exact).Notez que par défaut,
*
ne correspond pas aux fichiers commençant par un point (ni à*.*
). C'est souvent ce que vous voulez. Sinon, en bash, si vous faitesshopt -s dotglob
, il le fera (mais exclura toujours.
et..
). D'autres shells ont des méthodes différentes (ou aucune) pour inclure les dotfiles.Alternativement,
zip
a aussi une option-r
(récursive) pour faire des arborescences entières de répertoires en une fois (et ne pas avoir à se soucier du problème des dotfiles) :où
mydir
est le répertoire contenant vos fichiers. Notez que le zip produit contiendra la structure du répertoire ainsi que les fichiers. Comme le souligne peterph dans son commentaire, ceci est généralement considéré comme une bonne chose : l'extraction du zip permettra de stocker proprement tous les fichiers extraits dans un sous-répertoire.Vous pouvez aussi dire à zip de ne pas stocker les chemins avec l'option
-j
/--junk-paths
.La commande
zip
est fournie avec une documentation qui vous informe sur toutes ses (nombreuses) options ; tapezman zip
pour voir cette documentation. Ceci n'est pas propre à zip ; vous pouvez obtenir de la documentation pour la plupart des commandes de cette façon.Dans mon cas, je voulais compresser chaque fichier dans sa propre archive, donc j'ai fait ce qui suit (dans
zsh
) :Une autre façon serait d'utiliser find et xargs : (ceci pourrait inclure un répertoire " ;." ; dans le zip, mais il devrait quand même extraire correctement. Avec mon test, zip a supprimé le point avant la compression)
find . -type f -exec zip zipfile.zip {} +
(Le
+
peut être remplacé par;
si votre version defind
ne supporte pas la fin+
pour exec. Ce sera cependant plus lent...)Ceci inclura par défaut tous les sous-répertoires. Sur GNU find,
-maxdepth
peut empêcher cela.