Compacte recursivamente arquivos em um diretório e subdiretórios usando a ferramenta "zip" da linha de comando no Mac OS X e exclua arquivos .DS_Store de TODAS as subpastas

10

Estou tentando criar um arquivo ZIP usando a zipferramenta de linha de comando fornecida com o Mac OS X Terminal. Quero compactar recursivamente o conteúdo da pasta atual, mas excluindo .DS_Storearquivos. Estou tentando com isso:

zip -r myarchive.zip . -x .DS_Store

Os -x .DS_Storeexclui o .DS_Storearquivo na pasta atual, mas não nas subpastas recursivamente adicionados. Como excluo todos os .DS_Storearquivos de TODAS as subpastas também?

OMA
fonte

Respostas:

17

Adicione um curinga à opção de exclusão

zip -r myarchive.zip . -x "*.DS_Store"
fd0
fonte
Obrigado pela sua resposta. Funciona, mas por que? :). Você poderia explicar?
OMA
O *arquivo expande para nada ou parte do caminho, pois o zip compacta recursivamente os arquivos e seus diretórios. Então, ./.DS_Storeentão ./*/.DS_Storee assim por diante são excluídos do arquivo.
Fd0
Ah, interessante. Assim, o curinga funciona de forma diferente do que no mundo Windows, onde "* .DS_Store" significa apenas "qualquer arquivo que termina com .DS_Store"
OMA
1

Na maioria das vezes, quero excluir todos os arquivos ocultos, como .DS_Storeou .gitou.gitignore

Com um comando simples, você pode cuidar de tudo isso e compactar todos os arquivos e subpastas recursivamente

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

Ou melhor ainda, crie uma função no zsh para facilitar a vida

open ~/.zshrc

Adicione o seguinte código na seção de aliases

function zip-visible(){
    zip -r $1 $2 -X -x "*/\.*"
}

Recarregue a configuração zsh

source ~/.zshrc

Use assim

zip-visible archive.zip folder

alev
fonte