Créer un file Zip pour chaque sous-dossier mais ne contenant que des files correspondants

J'essaye de comprendre comment créer un file zip pour chaque sous-dossier ne contenant que des files qui correspondent à mes critères.

Par exemple, j'ai:

Folder1 Folder2 Folder3 

Chaque dossier contient le même set de files mais les noms de files sont légèrement différents, mais les extensions sont toujours les mêmes. Je voudrais zip le .shp, .shx, .qpj, .prj et .dbf dans chaque dossier. Chaque dossier serait son propre file zip. Je préfère ne pas stocker le nom du dossier réel autre que le nom du file zip.

J'ai essayé:

 find . -type d | xargs -I {} zip -r {}.zip {} 

Cela crée chaque file zip, mais zip zip chaque file, pas seulement ceux avec les extensions que je voudrais, il stocke également le nom du dossier dans le zip.

 find . -type d | xargs -I {} zip -r {}.zip {}'/'*.shp {}'/'*.shx {}'/'*.dbf {}'/'*.prj {}'/'*.qpj 

Ce qui précède ne fait rien d'autre que des erreurs qu'il n'y a rien à faire.

J'espère que mes mauvaises tentatives donnent une meilleure idée de ce que j'essaie de faire.

Toute aide appréciée.

Si toute l'étrangeté de vos noms de directory est qu'ils ont des espaces, cela devrait faire:

 shopt -s nullglob for dir in */;do dir="${dir%/}" zip "$dir".zip "$dir"/*.{shp,shx,qpj,prj,dbf} done 

Eh bien, pas sûr si avec un doublure est possible, probablement oui. Mais j'ai fait ce dont vous avez besoin à la place avec ceci:

 OIFS=$IFS IFS='\n' find . -type d -maxdepth 1 | while read -ri; do find $i -name "*.shp" -o -name "*.shx" -o -name "*.shx" -o -name "*.prj" -o -name "*.qpj" |zip -@ "$i".zip done IFS=$OIFS 

Chaque file zip sera votre nom dir.