我正在尝试通过 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
而不是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
)并打印它们的路径。