Posicionamento da lista --include no zip

1

Quando executo o comando

zip -r --include '*.rb' '*.sh' '*.zsh' '*irb*' tmp/small_v.zip bin

Eu recebo a mensagem de erro zip error: Argumentos de comando inválidos (nada para selecionar)

Se eu escrever o comando como

zip -r tmp/small_v.zip bin --include '*.rb' '*.sh' '*.zsh' '*irb*'

funciona. Por quê? Olhando para a página man zip (em particular, a opção --include), eu acho:

Embora a sintaxe de comando usada para exigir -i no final da linha de comando, esta versão na verdade permite -i (ou --include) em qualquer lugar . A lista de arquivos termina no próximo argumento começando com -, o final da linha de comando ou a lista terminator @ (um argumento que é apenas @).

A partir disso, eu teria concluído que ambas as versões do comando deveriam funcionar.

Estou usando o zip 3.0 em execução no MacOS Sierra.

    
por user1934428 03.05.2017 / 15:23

1 resposta

2

A parte importante neste caso é

The list of files terminates at the next argument starting with -, the end of the command line, or the list terminator @ (an argument that is just @).

Quando você escreve

zip -r --include '*.rb' '*.sh' '*.zsh' '*irb*' tmp/small_v.zip bin

tmp/small_v.zip e bin são tratados como arquivos fornecidos para --include , portanto, o comando zip acaba sem nenhum arquivo de destino nem arquivos para processar.

--include pode ser colocado em qualquer lugar, mas seus argumentos ainda têm que fazer sentido, e os argumentos restantes precisam ser identificáveis. Você poderia escrever seu comando como

zip --include '*.rb' '*.sh' '*.zsh' '*irb*' -r tmp/small_v.zip bin

em vez disso, usando o parâmetro -r para identificar o final da lista de arquivos para --include ou use @ para finalizar a lista:

zip -r --include '*.rb' '*.sh' '*.zsh' '*irb*' @ tmp/small_v.zip bin

Há exemplos muito semelhantes no final da seção --include em o zip(1) manpage .

    
por 03.05.2017 / 15:27

Tags