我正在尝试恢复远程服务器上最后创建的文件的内容。
当连接到远程服务器时,我这样做:
cat `ls -t /mypath/*.csv | head -1`
CMD="cat `ls -t /mypath/*.txt | head -1`"
但是当我尝试使用相同的命令时:
ssh@XX.XX.XX.XX $CMD
我收到错误:ls无法访问/mathath/*.csv没有这样的文件或目录 `是强制在本地系统上执行ls而不是远程执行。
还有其他办法吗?
谢谢
答案 0 :(得分:3)
您的命令失败是因为$ CMD中的反引号在您创建变量时在本地扩展,而不是在远程端扩展。所以ssh@XX.XX.XX.XX $CMD
实际上看起来像ssh@XX.XX.XX.XX "cat /mypath/local_file"
(并且local_file
可能不存在于远程主机上,并且可能不是您想要的文件。)
您可以通过直接向ssh提供命令来阻止此本地扩展。
ssh user@host 'cat /mypath/$(ls -t /mypath/*.txt | head -1)'
ls
返回相对于目录的路径名,因此您还需要在cat调用中包含基目录/mypath/
的路径。为避免此硬编码,将-d
标记传递给ls
。
ssh user@host 'cat $(ls -dt /mypath/*.txt | head -1)'