Bash cat在最后创建的远程文件上

时间:2013-12-20 11:36:10

标签: linux bash shell ssh

我正在尝试恢复远程服务器上最后创建的文件的内容。

当连接到远程服务器时,我这样做:

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而不是远程执行。

还有其他办法吗?

谢谢

1 个答案:

答案 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)'