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

182

Eu tenho um projeto com muitas pastas / arquivos ocultos nele. Eu 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

Eu também sei que posso excluir arquivos com a opção -x, então achei que isso funcionaria:

zip -r zipfile.zip directory -x .*

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

    
por Martin Thoma 27.08.2011 / 20:01

8 respostas

95

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

find /full_path -path '*/.*' -prune -o -type f -print | zip ~/file.zip -@
    
por arrange 27.08.2011 / 21:27
58

Primeiro de tudo, se você não tiver instalado o zip, instale-o primeiro da seguinte forma:

sudo apt-get install zip

Depois, basta 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 -@
    
por M A K Ripon 11.08.2015 / 08:28
52

Adicione " ao .* (caso contrário, seu shell expandirá .* para os arquivos de ponto no diretório atual) e também excluirá arquivos ocultos em subdiretórios:

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

Isso resultará em arquivos que começam com . para não serem adicionados ao seu arquivo zip.

rinzwind@discworld:~/tmp$ ls -la
drwxr-xr-x  2 rinzwind rinzwind 4096 2011-08-28 00:15 tmp
drwxr-xr-x  2 rinzwind rinzwind 4096 2011-08-28 00:15 .tmp
rinzwind@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%)
    
por Rinzwind 27.08.2011 / 21:17
8

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

find /full_path -path '*.*/.*' -prune -o -type f -print | zip ~/file.zip -@
    
por cosimnot 01.11.2012 / 04:19
7

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

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

Melhor compactar, mas mais lento:

tar cvpjf folder.tar.bz2 folder/ --exclude '.*'
    
por Tigrouzen 21.05.2014 / 18:51
5

O método correto seria:

zip -r zipfile.zip directory -x directory/.*
    
por Rômulo Neves 08.05.2014 / 18:49
4

Enquanto fecha dirs excluindo alguma extensão de arquivo:

$ cd /path/to/dir
$ zip -r dir.zip . -x "*.log" -x "*.cache"
    
por K-Gun 08.12.2014 / 18:49
3

Sem pastas e arquivos ocultos no diretório:

zip -r zipfile.zip directory/*

diretório: |── .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%)
    
por Umanshield 15.02.2017 / 09:45