*
Расширяется вашей локальной оболочки. Вы должны процитировать свой аргумент
ssh Svr1 /usr/local/bin/sudo -S find '/path/*/foo/' -name "20160208"
Эта команда с * в пути поиска отлично работает на локальном сервере
Svr1$ find /path/*/foo/ -name "*20160208"
Когда я пытаюсь это удаленно с другого сервера, это не работает
Svr2$ echo $Pswd|ssh Svr1 /usr/local/bin/sudo -S find /path/*/foo/ -name "*20160208*"
Сообщение об ошибке:
find: stat() error /path/*/foo/: No such file or directory
Однако, если я изменю путь поиска, чтобы избежать использования *, он будет работать нормально. Как это:
Svr2$ echo $Pswd|ssh Svr1 /usr/local/bin/sudo -S find /path/ -name "*20160208*"
Что я делаю неправильно? Я думаю, что мне нужно процитировать или избежать части строки, но я просто не могу понять это.
Большое спасибо.
*
Расширяется вашей локальной оболочки. Вы должны процитировать свой аргумент
ssh Svr1 /usr/local/bin/sudo -S find '/path/*/foo/' -name "20160208"
As @Matteo said, you need to escape the *
from your local shell. He's done that in his first example:
ssh Svr1 /usr/local/bin/sudo -S find '/path/*/foo/' -name "20160208"
As alternative, either of these should work as well, as the single quotes ('...'
) and backslash (\
) "hide" the *
wildcard from your local shell:
ssh -t Svr1 /usr/local/bin/sudo 'find /path/*/foo/ -name *20160208'
or
ssh -t Svr1 /usr/local/bin/sudo find /path/\*/foo/ -name \*20160208
As a side note, see that I've included a -t
argument to ssh
so that sudo
has a tty through which to ask for my password, which is MUCH better than putting the password on the command line, IMO. If you must pipe the sudo
password in, I suggest doing it via cat secret.txt | find ...
, which keeps the password out of the command line which is potentially visible to ps
and to anyone with access to your shell history (including ~/.history
and variants)