각 하위 폴더에 대해 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 파일은 디렉터리 이름입니다.

관련 정보