O *
é expandido pelo seu shell local. Você deve citar seu argumento
ssh Svr1 /usr/local/bin/sudo -S find '/path/*/foo/' -name "20160208"
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$ echo $Pswd|ssh Svr1 /usr/local/bin/sudo -S 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$ echo $Pswd|ssh Svr1 /usr/local/bin/sudo -S find /path/ -name "*20160208*"
O que estou fazendo de errado? Eu acho que preciso citar ou escapar parte da string, mas eu simplesmente não consigo descobrir.
Muito obrigado.
O *
é expandido pelo seu shell local. Você deve citar seu argumento
ssh Svr1 /usr/local/bin/sudo -S find '/path/*/foo/' -name "20160208"
Como o @Matteo disse, você precisa escapar do *
do seu shell local. Ele fez isso em seu primeiro exemplo:
ssh Svr1 /usr/local/bin/sudo -S find '/path/*/foo/' -name "20160208"
Como alternativa, qualquer um desses deve funcionar também, pois as aspas simples ( '...'
) e a barra invertida ( \
) "ocultam" o curinga *
do seu shell local:
ssh -t Svr1 /usr/local/bin/sudo 'find /path/*/foo/ -name *20160208'
ou
ssh -t Svr1 /usr/local/bin/sudo find /path/\*/foo/ -name \*20160208
Como observação, veja que incluí um argumento -t
para ssh
, de modo que sudo
tenha um tty através do qual peça minha senha, que é MUITO melhor do que colocar a senha na linha de comando, IMO. Se você precisar canalizar a senha sudo
, sugiro fazer isso via cat secret.txt | find ...
, que mantém a senha fora da linha de comando que é potencialmente visível para ps
e para qualquer pessoa com acesso ao histórico do shell (incluindo ~/.history
e variantes)