Compacte o conteúdo de algumas subpastas, mas não de outras

2

Eu gostaria de usar o comando unix zip para zipar um diretório. Digamos que o diretório esteja estruturado da seguinte forma:

dir1/
dir1/dir2/
dir1/dir2/file1
dir1/dir2/file2
dir1/dir3
dir1/dir3/file1
dir1/file1
dir1/file2

Gostaria de compactar dir1 em dir1.zip , de modo que dir1.zip contenha dir1/file1, dir1/file2, dir1/dir2/file1, dir1/dir2/file2, dir3/ , mas NÃO dir1/dir3/file1 . Resumindo, gostaria de compactar todos os ARQUIVOS sob dir1 , dir2 e todos os seus arquivos e dir3 , mas NENHUM dos arquivos.

Se eu fizer zip dir1 dir1/ , ele compactará tudo em dir1 , todos os seus arquivos e subpastas, mas não o conteúdo das subpastas. Se eu fizer zip -r dir1 dir1/ , ele compactará tudo em dir1 , incluindo todos os seus arquivos e todos os arquivos de suas subpastas. Gostaria de poder controlar quais subpastas devem ser compactadas recursivamente e quais não deveriam.

Obrigado.

    
por Myx 24.05.2011 / 20:58

3 respostas

3

$ zip -r dir1 dir1 -x dir1/dir3/*

funciona para mim. Aqui -x é a opção de exclusão. Você também pode usar uma opção de inclusão, mas, neste caso, a opção de exclusão envolve menos digitação.

Na verdade, a questão não está completamente clara. Deseja todos os diretórios e arquivos em dir3 excluídos, ou apenas os arquivos em dir3 ? O comando acima só funciona para o último.

    
por 24.05.2011 / 21:30
2

Um método para trabalhar com arquivos archive é montá-los e depois acessá-los como diretórios normais. FUSE está disponível para a maioria dos unices e suporta vários sistemas de arquivos para acessar arquivos compactados de forma transparente . Para arquivos zip, as possibilidades incluem fuse-zip ( AVFS também é conveniente, mas somente leitura).

Por exemplo, com o zip com fusível, veja como montar o arquivo e copiar os arquivos para ele.

mkdir tmp
fuse-zip /path/to/zip tmp
rsync -av --exclude='/dir1/dir3/*' dir1 tmp/
fusermount -u tmp; rmdir tmp
    
por 24.05.2011 / 22:39
0

Tente este comando no diretório pai de dir1:

tar --exclude=dir3/* -cf - dir1/ | zip dir1.zip -

E para descompactar dir1.zip use este comando:

unzip -p dir1.zip | tar xf -
    
por 24.05.2011 / 21:23

Tags