如何将最新的文本文件从远程服务器上的特定目录复制到本地计算机?
在服务器本身上,我可以执行以下操作:
$ cat `cd /home/user/dir ; readlink -f $(ls -t | head -1)` > ~/newest.txt
这会将最新文件的内容放入~/newest.txt
.但是,我无法通过 SSH 运行它,因为本地系统尝试解释刻度线和$(*)
命令。 Id est,这不起作用:
$ ssh [email protected] "cat `cd /home/user/dir ; readlink -f $(ls -t | head -1)`" > ~/newest.txt
bash: cd: /home/user/dir: No such file or directory
Connection to server.com closed.
显然,/home/user/dir
不存在于我的本地机器。我也尝试使用带标志的 SSH -t
,但这没有帮助。如何获取刻度并$()
在远程计算机上而不是在本地计算机上进行解析?
顺便说一句,一个比我聪明的人曾经宣称的输出ls
不应被解析。为了解决这个问题,我们可以安全地假设文件名仅包含可打印的 ASCII 字符。然而,解决一般情况的答案会很好,而且我确实想要学习,不仅仅是一次。
答案1
在将命令传递到远程服务器之前,您需要使用单引号而不是双引号来防止 shell 扩展。
顺便说一句,现在在命令替换中$(
更受欢迎。`
除非您使用仅支持`
考虑$(
在命令替换中使用的 shell。看此处了解更多详情。