Zipping des files deux par deux

J'ai un directory qui a 800 files comme celui-ci:

file1.png [email protected] file2.png [email protected] file3.png [email protected] ... etc 

J'ai besoin de créer des files zip comme celui-ci

 file1.zip (containing file1.png and [email protected]) file2.zip (containing file2.png and [email protected]) file3.zip (containing file3.png and [email protected]) 

Y a-t-il une command magique que je peux utiliser pour faire cela?

Si toujours il y en a deux , c'est simple:

 for f in file+([0-9]).png; do zip "${f%png}zip" "$f" "${f/./@2x.}"; done 

Notez que ce qui précède fonctionnera tel quel à partir de la command line. Si vous avez l'intention de l'utiliser dans un script, mettez shopt -s extglob quelque part avant cette ligne. ( extglob est activé par défaut uniquement dans les shells interactifs.)

Dans le vieux bash ne pas gérer les templates étendus cette solution de travail laide va fonctionner, mais il vaut mieux changer la logique comme suggéré dans une autre réponse par Leonid:

 for f in file[0-9].png file*[0-9][0-9].png; do zip "${f%png}zip" "$f" "${f/./@2x.}"; done 

Que diriez-vous d'une version légèrement modifiée de ce qui a été suggéré par manatwork? Quelque chose comme ça: for f in file*@2x.png; do zip ${f%@2x.png}.zip $f ${f/@2x./.}; done for f in file*@2x.png; do zip ${f%@2x.png}.zip $f ${f/@2x./.}; done

Il itère sur les files «seconde paire» seulement, et il n'y a pas d'expression rationnelle dans la génération de la list des files.