Globbing falha no zsh, mas funciona no bash

2

Eu tenho um alias no bash, que estou tentando migrar para o zsh. Eu pensei que pode ter sido o pseudônimo em si, mas agora parece que é apenas o globbing.

grep -irl --exclude=\*.{log,class,fuegoclass,dat}* --exclude-dir={build,system,lib} data

Qual é o caminho certo para excluir essas extensões de arquivos e diretórios no zsh?

    
por jktravis 19.05.2014 / 23:46

1 resposta

3

Em:

grep -irl --exclude=\*.{log,class,fuegoclass,dat}* --exclude-dir={build,system,lib} data

Em zsh e bash , --exclude=\*.{log,class,fuegoclass,dat}* expande primeiro para --exclude=\*.log* --exclude=\*.class* --exclude=\*.fuegoclass* --exclude=\*.dat* e, por causa do * sem aspas, cada um é tratado como um padrão para executar a globulação.

Por exemplo, --exclude=\*.log* expandirá para a lista de arquivos no diretório atual cujo nome começa com --exclude=*.log .

Se algum dos globs não tiver correspondência, em zsh , o comando será cancelado. Em bash , os globs se expandirão para si mesmos.

Aqui, você não quer globbing, então você deve citar todos os caracteres globbing (em zsh e bash , zsh é gentil o suficiente para apontar seu erro para você).

grep -irl --exclude=\*.{log,class,fuegoclass,dat}\* --exclude-dir={build,system,lib} data
    
por 20.05.2014 / 00:09