Muitas vezes preciso encontrar um arquivo, mas não tenho certeza de qual é o nome, algo assim:
$ find -iname '*foo*' -o -iname '*bar*' -o -iname '*blah*'
Isso é um pouco tedioso. Gostaria de criar um alias que seja mais fácil de usar, assim:
$ findany foo bar blah
Aqui está minha tentativa:
findany() {
args=("-iname" "'*$1*'")
shift
while [ $# -gt 0 ]; do
args+=("-o" "-iname" "'*$1*'")
shift
done
find ${args[@]}
}
O problema é que nunca produz nenhum resultado, mesmo que os arquivos estejam ali:
$ ls
bar.txt blah.txt foo.txt
$ findany foo bar blah
# nothing
Se eu adicionar echo
na frente do comando, parece correto:
$ findany foo bar blah
find -iname '*foo*' -o -iname '*bar*' -o -iname '*blah*'
E se eu copiar a saída acima e executá-la, funcionará bem:
$ find -iname '*foo*' -o -iname '*bar*' -o -iname '*blah*'
./bar.txt
./foo.txt
./blah.txt
Acho que tem a ver com divisão de argumentos ou aspas, mas não sei como depurá-lo.
Normalmente uso zsh, mas verifiquei o mesmo comportamento no bash.