Arquivos zip individuais para pastas - Excluindo alguns

0

Existem vários diretórios no diretório "home". dir1 dir2 dir3 dir4 dir5

Eu quero que o script bash arquive recursivamente o dir1-2-3 como dir1.zip, dir2.zip & dir3.zip, mas exclui dir4 e dir5.

É factível?

    
por Dhillon 14.09.2017 / 14:37

1 resposta

4

Não, o Linux removeu esse recurso com a versão mais recente.

Apenas brincando, é claro que é factível.

for dir in dir1 dir2 dir3; do
    zip -r "$dir" "$dir"
done

Se os diretórios realmente tiverem o mesmo prefixo:

for dir in dir[1-3]; do
    zip -r "$dir" "$dir"
done

Isso pressupõe que o loop seja executado no diretório correto.

Se você tiver muitos diretórios e desejar excluir apenas alguns, use bash com sua opção extglob shell definida:

shopt -s extglob
for dir in dir!(4|5); do
   test -d "$dir" || continue
   zip -r "$dir" "$dir"
done

O padrão dir!(4|5) corresponderá a qualquer nome começando com dir e continuando com qualquer coisa que não seja 4 ou 5 . O padrão também pode ter sido escrito dir!([4-5]) ou !(dir4|dir5) .

Também verifiquei, no último loop, que qualquer nome correspondente que não seja o nome de um diretório é ignorado.

    
por 14.09.2017 / 14:47