Unix não encontra trabalho com um curinga no caminho quando ssh'ing

2

Este comando com um * no caminho de localização funciona bem no servidor local

Svr1$ find /path/*/foo/ -name "*20160208"

Quando eu tento isso remotamente de outro servidor, não funciona

Svr2$ ssh Svr1 find '/path/*/foo/' -name "*20160208*"

A mensagem de erro é:

find: stat() error /path/*/foo/: No such file or directory

No entanto, se eu alterar o caminho de pesquisa para evitar o uso do * ele funciona bem. Assim:

Svr2$ ssh Svr1 find '/path/' -name "*20160208*"

Alguma ideia do que estou fazendo errado?

Muito obrigado.

    
por LLJ 10.02.2016 / 18:04

2 respostas

3

Seu problema é que o comando find não interpola / interpreta glob (s) de diretório (a lista de diretórios sob a qual ele deve procurar), ele apenas interpola o padrão como um glob que deve corresponder. O que interpreta o diretório globs é o próprio shell que você executa find dentro dele. Quando você executa find via ssh, não há shell para fazer este trabalho.

Por sorte, não há regras contra a execução de um shell via ssh e fazer com que o shell execute seu comando com todo o material necessário interpolado e o restante dos wildcards preservados para encontrar .

Algo parecido com o que usei na minha máquina:

ssh lx@localhost "bash -c '/usr/bin/find /tmp/d* -name \"f*\" '"
lx@localhost's password:
/tmp/d1/f1
/tmp/d2/f2
    
por 10.02.2016 / 22:13
0

A maneira como você escreve é avaliada no host local, que geralmente é algo que você não quer. Você precisa escapar das seqüências para deixá-lo avaliar no outro host. Algo como isso deveria fazer isso:

Svr2$ ssh Svr1 "find /path/*/foo/ -name \"*20160208*\""
    
por 10.02.2016 / 18:27