ssh 并查找更改路径

ssh 并查找更改路径

我正在尝试通过 ssh 连接到远程服务器,然后在搜索过程中更改部分路径,如下所示:

DIRS="dir1 dir2 dir3 dir4"      
ssh [email protected] 
         for D in $DIRS ;
         do
         "/User/$D/$Specified_file"
              if [ -e $Specified_file ] ;
                 then
                 cat $Specified_file
              fi
          done

但我的问题是 shell 执行 ssh 然后在本地搜索指定的文件。

我在这里做错了什么?请假设$Specified_file可以访问并且输入正确。

答案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而不是forif。请注意引号(和反斜杠),它们很重要。我们也可以将其写成 等,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)并打印它们的路径。

相关内容