Como compactar apenas arquivos em vários subdiretórios?

1

Eu tenho uma pasta working e sua estrutura é algo assim -

working/
  100/
      1/
      2/
      3/
  200/
      1/
      2/
      3/
  300/
      1/
      2/
      3/

E cada uma dessas pastas 1 2 3 tem cerca de 1000 arquivos.

Desejo compactar os arquivos nas pastas 1 2 3 separadamente. O zip não deve conter seus diretórios principais. Coloque os zips onde eles estiverem. Por exemplo, se houver arquivos foo1 , foo2 e foo3 na pasta 1 , ele deverá formar um zip em 1 , que deve ter apenas os arquivos foo.

    
por Chinmay Kunkikar 29.01.2015 / 00:19

1 resposta

2

Um loop simples fará o truque.

cd working
for dir in */*/; do
  [ -e "$dir/files.zip" ] ||   # skip directories where the zip already exists
  ( cd -- "$dir" && zip -r files.zip .)
done

Observe que o zip é inteligente o suficiente para ignorar o arquivo zip que está sendo construído ao recorrer nesse diretório. Alguns outros programas de arquivamento tentariam preencher o arquivo que está sendo construído no arquivo que está sendo construído.

    
por 29.01.2015 / 23:20