Recursivamente zipar todos os arquivos em um diretório para arquivos zip individuais… mas em um diretório separado

1

Perguntas semelhantes foram feitas, mas não consegui encontrar exatamente o que estou procurando. Basicamente, eu tenho um diretório grande com subdiretórios e muitos arquivos, e eu quero entrar em cada diretório e subdiretório de forma recursiva, e zipar cada arquivo individualmente. Eu encontrei esta solução, mas não é bem o que eu quero:

find . -type f -execdir zip '{}.zip' '{}' \;

Source

Isso gera os arquivos zip no diretório de onde eles vieram. No entanto, eu quero os arquivos zip em um diretório completamente separado, mas com a mesma estrutura de diretórios, com apenas os arquivos zip resultantes. Alguém pode ajudar com isso?

    
por AnthonyWeston 15.03.2017 / 18:52

2 respostas

1

Você pode pré-pendurar um caminho relativo para o local do arquivo zip como:

find . -type f -exec zip -D '../zipdir/{}.zip' '{}' \; 

Se necessário, crie a estrutura de diretórios que você pode fazer:

find . -type d -exec mkdir -p '../zipdir/{}' \;
    
por 15.03.2017 / 22:27
0

Se você não é casado com arquivos zip, você pode simplesmente criar uma imagem squashfs de toda a árvore de diretórios em questão que pode ser montada também (sem abertura e procurando em arquivos zip específicos para ver o que está lá). Ele pode ter uma melhor compactação também, uma vez que ele observa toda a árvore, mais como um arquivo "sólido", em vez de muitos arquivos zip individuais.

Basicamente você só precisa do pacote squashfs-tools (é assim que é chamado no Debian / Ubuntu, talvez um nome diferente em diferentes famílias de linux), então:

mksquashfs /some/directory  archive.squashfs

e para montar / ver / navegar:

mount archive.squashfs /mnt/mountpoint -t squashfs

o sinalizador -t pode até mesmo ser opcional, o mount é muito bom para descobrir automaticamente os tipos. Também não precisa do sinalizador -o loop , mas tente apenas no caso de ser necessário.

Veja link ou pesquise como usar o squashfs .

    
por 17.03.2017 / 07:28