Evitar a expansão de curingas na localização

1

Existe uma maneira de impedir a expansão de curingas no comando find para que o seguinte funcione?

find . -iname "foo [bar]"

Como apontado aqui , tentei executar set -f , set -o noglob e setopt noglob antes de find , mas não funcionou.

É um script bash e estou usando o Ubuntu 10.04.

Eu sei que eu poderia apenas escapar dos caracteres curinga, mas temo que eu possa deixar um fora.

    
por lsborg 08.12.2013 / 19:35

3 respostas

2

Como @njsg já disse, o problema é causado por find , não pelo shell: As aspas duplas que você está usando já estão protegendo sua expressão do shell; é passado para find não modificado.

O problema é que find trata o argumento como -name e -iname como um padrão. A única maneira de suprimir isso seria usar uma opção find que não trata seu argumento como um padrão. Mas find não tem tal coisa, de acordo com a minha página de manual, então o que você quer não pode ser feito. O melhor que você pode fazer é aprimorar seu script para escapar dos colchetes automaticamente, antes de passá-los para find . A seguinte substituição sed de aparência engraçada fará isso por você:

echo "foo [bar]" | sed 's/[][]/\&/g'

imprimirá: foo \[bar\]

    
por 08.12.2013 / 23:02
4

O problema não é com o shell, mas com o find. O argumento para -name e -iname é um próprio padrão . [bar] significa b , a ou r a find . Tente apenas escapar dos colchetes, isto é:

find . -iname "foo \[bar\]"

(Edit: Com isso, você não está escapando deles no nível do shell, mas passando as barras invertidas para find .)

    
por 08.12.2013 / 19:57
-1

Você pode usar aspas simples para impedir a expansão.

find . -iname 'foo [bar]'
    
por 08.12.2013 / 19:38