如何从具有变量作为文件路径的服务器进行 scp?
How do I scp from a server with a variable as the file path?
我正在尝试编写一个 bash 脚本来 (1) 在服务器上找到与字符串模式匹配的最新文件,以及 (2) 将该文件从服务器复制到本地。我已经完成了第一部分,但在第二部分遇到了问题。
我已经尝试了使用引号、大括号、转义冒号、对服务器上的根文件夹进行硬编码的所有组合,但 none 行得通。
file_name=$(ssh -t id@server.com "ls -t /path/to/file/on/server/file_name_* | head -1; bash -l")
echo $file_name #this works
scp id@server.com:$file_name path/to/local #this does not work
第 2 行有效,所以我假设第 1 行有效。当我使用 file_name
硬编码将命令键入终端时,我可以 运行 第 3 行没有问题。当我 运行 这个脚本时,我收到一条错误消息,说 No such file or directoryhalf/of/the/path/to/the/file.csv
基本上是错误消息,没有 space,然后是第 2 行回声的一半路径。感谢任何帮助。
不明白你为什么用"ssh -t"和"bash -l"。不需要它们。它们在我的测试环境中引起问题。
也就是说,这种问题很可能是由不可见字符引起的。要检查是否是这种情况,您可能需要 echo "[$file_name]"
以便您可以查看其中的内容。
在这种特殊情况下,请在下面查看我发现的内容:
$ file_name=$(ssh -t testbox "ls -t /home/ec2-user/hello* | head -1")
Connection to xxx closed.
$ echo "[$file_name]"
]/home/ec2-user/hello # <--- the expected output is [/home/ec2-user/hello]
$ scp testbox:$file_name ./
: No such file or directory
相比之下,没有 -t
的 ssh
给了我们预期的结果:
$ file_name=$(ssh testbox "ls -t /home/ec2-user/hello* | head -1")
$ echo "[$file_name]"
[/home/ec2-user/hello]
$ scp testbox:$file_name ./
hello 100% 0 0.0KB/s 00:00
我正在尝试编写一个 bash 脚本来 (1) 在服务器上找到与字符串模式匹配的最新文件,以及 (2) 将该文件从服务器复制到本地。我已经完成了第一部分,但在第二部分遇到了问题。
我已经尝试了使用引号、大括号、转义冒号、对服务器上的根文件夹进行硬编码的所有组合,但 none 行得通。
file_name=$(ssh -t id@server.com "ls -t /path/to/file/on/server/file_name_* | head -1; bash -l")
echo $file_name #this works
scp id@server.com:$file_name path/to/local #this does not work
第 2 行有效,所以我假设第 1 行有效。当我使用 file_name
硬编码将命令键入终端时,我可以 运行 第 3 行没有问题。当我 运行 这个脚本时,我收到一条错误消息,说 No such file or directoryhalf/of/the/path/to/the/file.csv
基本上是错误消息,没有 space,然后是第 2 行回声的一半路径。感谢任何帮助。
不明白你为什么用"ssh -t"和"bash -l"。不需要它们。它们在我的测试环境中引起问题。
也就是说,这种问题很可能是由不可见字符引起的。要检查是否是这种情况,您可能需要 echo "[$file_name]"
以便您可以查看其中的内容。
在这种特殊情况下,请在下面查看我发现的内容:
$ file_name=$(ssh -t testbox "ls -t /home/ec2-user/hello* | head -1")
Connection to xxx closed.
$ echo "[$file_name]"
]/home/ec2-user/hello # <--- the expected output is [/home/ec2-user/hello]
$ scp testbox:$file_name ./
: No such file or directory
相比之下,没有 -t
的 ssh
给了我们预期的结果:
$ file_name=$(ssh testbox "ls -t /home/ec2-user/hello* | head -1")
$ echo "[$file_name]"
[/home/ec2-user/hello]
$ scp testbox:$file_name ./
hello 100% 0 0.0KB/s 00:00