Crie Zip para cada subpasta, mas contendo apenas arquivos correspondentes

3

Estou tentando descobrir como criar um arquivo zip para cada subpasta contendo apenas arquivos que correspondam aos meus critérios.

Por exemplo, eu tenho:

Folder1
Folder2
Folder3

Cada pasta contém o mesmo conjunto de arquivos, mas os nomes dos arquivos em cada um são um pouco diferentes, mas as extensões são sempre as mesmas. Eu gostaria de compactar o .shp, .shx, .qpj, .prj e .dbf em cada pasta. Cada pasta seria seu próprio arquivo zip. Eu prefiro não armazenar o nome da pasta real diferente do nome do arquivo zip.

Eu tentei:

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

Isso cria cada arquivo zip, mas zipia todos os arquivos, não apenas aqueles com as extensões que eu gostaria, também armazena o nome da pasta no zip.

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

O acima não faz nada além de erros que não há nada para fazer.

Espero que minhas tentativas ruins dêem uma ideia melhor do que estou tentando fazer.

Qualquer ajuda apreciada.

    
por Steven 28.10.2013 / 21:58

2 respostas

2

Se toda a estranheza em seus nomes de diretório é que eles têm espaços, isso deve ser feito:

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

Bem, não tenho certeza se com um forro é possível, provavelmente sim. Mas eu fiz o que você precisa com isso:

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

Cada arquivo zip será seu nome de dir.

    
por 28.10.2013 / 22:14