通过 SSH 复制目录中的最新文件

dot*_*hen 2 bash ssh quoting

如何将最新的文本文件从远程服务器上的特定目录复制到他的本地机器?

在服务器本身上,我可以执行以下操作:

$ cat `cd /home/user/dir ; readlink -f $(ls -t | head -1)` > ~/newest.txt
Run Code Online (Sandbox Code Playgroud)

这会将最新文件的内容放入~/newest.txt. 但是,我无法通过 SSH 运行它,因为本地系统会尝试解释刻度线和$(*)命令。Id est,这不起作用:

$ ssh me@server.com "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.
Run Code Online (Sandbox Code Playgroud)

显然,/home/user/dir我的本地机器上不存在。我也尝试使用带有-t标志的SSH ,这没有帮助。我怎样才能$()在远程机器上而不是在我的本地机器上获取滴答声并进行解析?

顺便说一句,比我更聪明的人曾经宣布不应解析的输出ls。对于这个问题,我们可以安全地假设文件名只包含可打印的 ASCII 字符。但是,解决一般情况的答案会很好,而且我确实想学习,而不仅仅是一次。

Ark*_*zyk 8

在将命令传递到远程服务器之前,您需要使用单引号而不是双引号来防止 shell 扩展。

顺便说一句,$(现在优先`于命令替换。除非您使用仅支持`使用$(in 命令替换的shell 。请参阅此处了解更多详情