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

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. 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 deverão 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 pensei que isso poderia funcionar:

zip -r zipfile.zip directory -x .*

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

Responder1

Primeiro de tudo, se você não tiver o zip instalado, 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 (Tirado dehttp://osxdaily.com/2013/04/30/how-to-exclude-files-from-a-zip-archive/)

Os princípios básicos da exclusão de arquivos ao criar um arquivo zip estão centrados no -xsinalizador, que é usado para excluir arquivos do arquivo que correspondam a um nome ou padrão específico. No mais básico, ficará assim:

zip archive.zip files -x "ExcludeMe"

O que significa que você pode excluir um único arquivo, digamos que seja chamado “Nothanks.jpg”

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

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

Excluir arquivos .DS_Store dos arquivos Zip

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

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

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

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

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

Excluir tipos de arquivos 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 compactará um diretório inteiro, menos todos .jpgos arquivos:

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

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

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

Compacte um diretório, menos .gite seu conteúdo:

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

Compacte uma pasta, sem incluir o .svndiretório:

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 um ou todos os arquivos e pastas invisíveis que são prefixados com um ponto final, seja um diretório como .svnou um arquivo individual como .bash_profileou .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 "*/\.*"

Responder2

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

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

Responder3

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

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

Isso fará com que os arquivos começando com a .não sejam 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%)

Responder4

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 -@

informação relacionada