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%)
$