
私の基準に一致するファイルのみを含むサブフォルダごとに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ファイルはディレクトリ名です。