zip não está ignorando itens marcados pelo sinalizador -x

1

Eu tenho o seguinte comando zip:

#!/usr/bin/env bash

zip -r dist/output.zip . \
-x dist \
-x .idea \
-x node_modules \
-x scripts \
-x *.zip \
-x .git \
-x .gitignore \
-x .npmignore

Estou simplesmente tentando compactar tudo no diretório atual, mas ignorar tudo marcado por -x.

Parece que o comando está funcionando, exceto que não está ignorando nada, está fechando tudo.

    
por Alexander Mills 01.01.2018 / 02:00

1 resposta

1

Você está certo, não parece ser muito intuitivo.

O manual diz , na opção --include

So to include dir, a directory directly under the current directory, use zip -r foo . -i "dir/*"

e que

Note that currently the trailing / is needed for directories

A opção include é mencionada em -x , por isso é seguro assumir que as mesmas regras funcionam lá.

A julgar pelos exemplos, você precisa adicionar o /* a todos os diretórios excluídos para que sejam realmente excluídos. Apenas listar -x dir/ não funcionará, ele ainda salvará os arquivos no diretório, mas não o próprio diretório. Então:

$ mkdir foo bar
$ touch foo/a bar/a
$ zip -r test.zip . -x "foo/*"
updating: bar/ (stored 0%)
updating: bar/a (stored 0%)
$
    
por 01.01.2018 / 03:16