Como posso criar um arquivo zip de um diretório inteiro via terminal sem arquivos ocultos?

Eu tenho um projeto com muitas pastas / arquivos ocultos nele. Quero criar um arquivo zip dele, mas no arquivo não deve haver pastas / arquivos ocultos. Se os arquivos em uma pasta oculta não estiverem ocultos, eles também não devem ser incluídos.

Eu sei que posso criar um arquivo zip de um diretório como este:

zip -r zipfile.zip directory

Também sei que posso excluir arquivos com a opção-x, então achei que isso poderia funcionar:

zip -r zipfile.zip directory -x .*

Não funcionou. Todos os diretórios ocultos ainda estavam no arquivo zip.

Em primeiro lugar, se você não instalou o zip, instale-o primeiro da seguinte maneira:

sudo apt-get install zip

Então, para simplesmente criar um arquivo zip:

zip -r compressed_filename.zip foldername

Se você deseja excluir arquivos ocultos:

find /folder_path -path '*/.*' -prune -o -type f -print | zip ~/compressed_filename.zip -@

Excluindo arquivos de um arquivo Zip(retirado do http://osxdaily.com/2013/04/30/how-to-exclude-files-from-a-zip-archive/)

Os fundamentos da exclusão de arquivos ao criar um arquivo zip estão centrados em torno do -x sinalizador, que é usado para excluir arquivos do arquivo que correspondem a um nome ou padrão específico. No que é mais básico, ele vai olhar como este:

zip archive.zip files -x "ExcludeMe"

O que significa que você pode excluir um único arquivo, digamos que ele tenha o nome "Nothanks.jpg"

zip archive.zip images/ -x "Nothanks.jpg"

Vamos cobrir alguns exemplos específicos em que isso é útil.

Excluir .DS_Store Arquivos de arquivos Zip

Isso impedirá que os metadados do Mac normalmente invisíveis .DS_Store arquivos de serem incluídos em um arquivo zip, que são agrupados por padrão:

zip -r archivename.zip archivedirectory -x "*.DS_Store"

Se o diretório incluir subdiretórios, no entanto, você desejará usar outra variação desse comando para excluir os arquivos ds_store dos subdiretórios também:

zip -r archive.zip directory -x "*/\.DS_Store"

Nota: nem todos os shells exigem as aspas para que este comando funcione corretamente, mas no shell bash (o padrão para OS X) você precisará usar as aspas para excluir com curingas e padrões.

Excluir tipos de arquivo específicos de um arquivo Zip

Com curingas, você também pode excluir todos os arquivos de um determinado tipo, concentrando-se na extensão. Por exemplo, este comando irá compactar um diretório inteiro, menos qualquer .jpg arquivo:

zip -r archive.zip directory -x "*.jpg"

Isso pode ser modificado para qualquer extensão de arquivo ou padrão específico correspondente em um nome de arquivo.

Excluir o.git ou .diretório svn de um arquivo Zip

Zip um diretório, menos .git e é conteúdo:

zip -r zipdir.zip directorytozip -x "*.git*"

Compactar uma pasta, sem incluir o .svn Directorio:

zip -r zipped.zip directory -x "*.svn*"

Excluir todos os arquivos ocultos de um arquivo Zip

Como padrões e curingas podem ser usados, Você também pode excluir qualquer ou todos os arquivos e pastas invisíveis que são feitos assim sendo prefixados com um ponto, seja um diretório como .svn ou um arquivo individual como .bash_profile ou .htaccess.

zip -r archivename.zip directorytozip -x "*.*"

Ou para excluir todos os arquivos invisíveis de todos os subdiretórios:

zip -r archive.zip directory -x "*/\.*"

Isso também exclui arquivos ocultos em diretórios Não ocultos:

find /full_path -path '*/.*' -prune -o -type f -print | zip ~/file.zip -@

Adicionar " para o .* (caso contrário, seu shell se expandirá .* arquivos dot no diretório atual), e também excluir arquivos ocultos em subdiretórios:

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

Isso resultará em arquivos começando com um . não deve ser adicionado ao seu arquivo zip.

rinzwind@discworld:~/tmp$ ls -ladrwxr-xr-x  2 rinzwind rinzwind 4096 2011-08-28 00:15 tmpdrwxr-xr-x  2 rinzwind rinzwind 4096 2011-08-28 00:15 .tmprinzwind@discworld:~/tmp$ zip -r zipfile.zip . -x .*adding: .tmp/ (stored 0%)adding: tmp/ (stored 0%)rinzwind@discworld:~/tmp$ zip -r zipfile.zip . -x ".*" -x "*/.*"updating: tmp/ (stored 0%)

Exemplo para excluir todas as pastas que começam com . :

tar cvpzf folder.tgz folder/ --exclude '.*'

Melhor comprimir, mas mais lento :

tar cvpjf folder.tar.bz2 folder/ --exclude '.*'

Este inclui todos"."diretórios, subdiretórios e"."arquivos ou diretórios dentro de diretórios...Essencialmente a primeira resposta, mas inclui nível superior"." arquivo.

find /full_path -path '*.*/.*' -prune -o -type f -print | zip ~/file.zip -@

O método correto seria:

zip -r zipfile.zip directory -x directory/.*

Enquanto zipando dirs excluindo alguma extensão de arquivo:

$ cd /path/to/dir$ zip -r dir.zip . -x "*.log" -x "*.cache"

Sem pastas e arquivos ocultos no diretório:

zip -r zipfile.zip directory/*

Directorio:

|── .git│   ├── src│   └── Work.file├── .test│   └── .file└── test.file
$ zip -r zipfile.zip directory/*adding: directory/src/ (stored 0%)adding: directory/src/Work.file (stored 0%)adding: directory/test.file (stored 0%)