Zipar todos os arquivos / pastas em um diretório, exceto os ocultos?

4

Como posso fazer um zip de todos os arquivos e subdiretórios no diretório mydir , exceto todos os arquivos / pastas que começam com .* ?

O comando:

zip -r mydir.zip mydir/

... incluirá tudo. Por exemplo, se eu tiver:

mydir/foo
mydir/bar
mydir/.hello

Eu gostaria que foo e bar fossem incluídos em mydir , mas não .hello .

Como posso fazer isso?

    
por user46976 21.08.2010 / 18:42

6 respostas

6

Isso funciona para mim:

zip -r mydir.zip mydir -x "*/.*"

@Joe Internet, @Dariusz: os padrões normais de shell não funcionarão corretamente porque o zip corresponde ao caminho completo + nome de arquivo internamente (como explica o manual do zip ...;))

    
por 21.08.2010 / 21:51
1

Você pode usar padrões de shell para excluir correspondências, tudo está escrito no manual (com exemplos)

    
por 21.08.2010 / 18:45
1

Se você preferir mais recursos de filtragem complexa , encontre é uma boa ferramenta:

find mydir/ -! -name ".hello" -print | zip mydir -@

Divirta-se com "encontrar".

    
por 22.08.2010 / 17:36
0

Tente isso ...

zip -r mydir.zip mydir/ -x .*.*
    
por 21.08.2010 / 19:10
0

Mais curto e aproveita os recursos do globbing:

zip -r mydir.zip mydir/*

(. arquivos não estão incluídos no curinga *)

Observe que o diretório 'mydir /' pode não estar incluído nos caminhos dos arquivos no arquivo zip resultante, portanto isso alterará ligeiramente a saída. Você pode ter que alterar seu processo de extração como resultado.

    
por 22.08.2010 / 03:08
0

A abordagem a seguir funciona para esse tipo de árvore de diretórios:

$ tree .
.
├── adir1
│   ├── afile1
│   ├── afile2
│   ├── afile3
│   └── afile4.txt
├── adir2
│   ├── afile1
│   ├── afile2
│   ├── afile3
│   └── afile4.txt
├── adir3
│   ├── afile1
│   ├── afile2
│   ├── afile3
│   └── afile4.txt
├── afile1
├── afile2
├── afile3
├── foo.test

Essa foi a solução que funcionou para esse cenário (que, acredito, é o caso mais geral).

 $ find . -type f -not -path '*/\.*' -exec zip -r test.zip {} +

Exemplo

$ find . -type f -not -path '*/\.*' -exec zip -r test.zip {} +
updating: adir1/afile1 (stored 0%)
updating: adir1/afile1.zip (stored 0%)
updating: adir1/afile2 (stored 0%)
updating: adir1/afile3 (stored 0%)
updating: adir1/afile4.txt (stored 0%)
updating: adir2/afile1 (stored 0%)
updating: adir2/afile2 (stored 0%)
updating: adir2/afile3 (stored 0%)
updating: adir2/afile4.txt (stored 0%)
updating: adir3/afile1 (stored 0%)
updating: adir3/afile2 (stored 0%)
updating: adir3/afile3 (stored 0%)
updating: adir3/afile4.txt (stored 0%)
updating: afile1 (stored 0%)
updating: afile2 (stored 0%)
updating: afile3 (stored 0%)
updating: foo.test (deflated 87%)
    
por 25.05.2017 / 22:27