Я пытаюсь ssh на удаленный сервер, а затем изменить часть пути во время поиска следующим образом:

DIRS="dir1 dir2 dir3 dir4"      
ssh remoteserver@example.com 
         for D in $DIRS ;
         do
         "/User/$D/$Specified_file"
              if [ -e $Specified_file ] ;
                 then
                 cat $Specified_file
              fi
          done

Но моя проблема в том, что оболочка выполняет ssh, а затем ищет указанный файл локально.

Что я здесь не так делаю? Пожалуйста, предположите, что $Specified_file доступен и введен правильно.

1 ответ1

1

На основании ваших комментариев, я думаю, вы можете захотеть что-то вроде этого:

dirs="/dir1 '/path/with spaces/in it' /foo/dir3 '/another/path/with space'"
file="name with spaces maybe"

ssh user@server "find $dirs -maxdepth 1 -name \"$file\""

Я использовал find вместо for и if . Имейте в виду, цитаты (и обратный слеш), они важны. Мы могли бы написать это for и т.д., Но это было бы менее элегантно. Если вам нужно сделать это таким образом, дайте мне знать.

Внимание: обратите внимание на ваши переменные, потому что вы можете ввести команду, например:

file='dummy name" ; rm "very important file" ; echo "'

Основная проблема с вашим кодом заключалась в том, что ssh получил команды для выполнения на удаленной стороне. Все строки после были обработаны как локальные команды.

Мой код расширяется до следующей команды, которая будет выполняться на удаленной стороне:

find /dir1 '/path/with spaces/in it' /foo/dir3 '/another/path/with space' -maxdepth 1 -name "name with spaces maybe"

Он ищет файлы с заданным именем в указанных каталогах (не спускаясь в подкаталоги благодаря -maxdepth 1) и печатает их пути.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .