サブフォルダごとにZipを作成しますが、一致するファイルのみを含める

サブフォルダごとにZipを作成しますが、一致するファイルのみを含める

私の基準に一致するファイルのみを含むサブフォルダごとにzipファイルを作成する方法を理解しようとしています。

たとえば、次のようになります。

Folder1
Folder2
Folder3

各フォルダには同じファイルセットが含まれていますが、各フォルダのファイル名はわずかに異なりますが、拡張子は常に同じです。 .shp、.shx、.qpj、.prj、.dbfを各フォルダに圧縮したいと思います。各フォルダは独自のzipファイルです。実際のフォルダ名を保存せずにzipファイル名で保存したいです。

私は試した:

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

これにより、すべてのzipファイルが作成されますが、必要な拡張子を持つファイルだけでなくすべてのファイルを圧縮し、フォルダ名もzipに保存します。

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

上記は何もしませんが、エラーのみが発生します。

私の不都合な試みが私が何をしたいのかをよりよく知ることができることを願っています。

助けてくれてありがとう。

答え1

ディレクトリ名にスペースがあることが奇妙なことである場合は、次のことを行う必要があります。

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

答え2

まあ、ライナーが使えるかどうかわからないかもしれません。しかし、私はあなたが必要とすることをしました:

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

各zipファイルはディレクトリ名です。

関連情報