有没有办法像做远程副本的“ scp”一样做远程“ ls”?


55

有没有一种方法可以像在标准linux shell中进行远程复制一样,执行“ scp”远程复制?


我可以看到这样做很不错,但是为什么不直接使用SSH并输入ls呢?
SpacemanSpiff'3

@SpacemanSpiff-这样您就可以编写脚本。这就是我到达此页面的方式。
wobbily_col 2014年

Answers:


75

您可以始终这样做:

ssh user@host ls -l /some/directory

这将SSH到主机,运行ls,将输出转储回给您,然后立即断开连接。


2
...如果您具有真正的Shell访问权限。有些系统具有特殊的外壳,将只接受某些scprsync电话,或许sftp还有,就是这样。
glglgl 2014年

您如何将其别名为“ rls”?
海象猫

2
@WalrustheCat alias rls="ssh user@host ls -l"重新启动您的shell,它rls /some/directory应该可以工作。
chishaku 2015年

唯一的问题是找不到文件会返回错误代码,而这样做的原因恰恰是我要调用ls的原因。
史蒂夫·科恩

不关注@SteveCohen。您是否要从远程ls获得错误代码?如果是这样,$?在执行命令后立即包含它。(例如,如果我在找不到的文件上[本地或远程]运行此文件,则返回2)
Corey

11

要列出目录中的所有文件:

rsync host.name.com:directory/path/'*'

对于诸如find directory / path -ls之类的东西

rsync -r host.name.com:directory/path

如果主机上未安装rsync,则会显示bash: rsync: command not found。我猜这意味着它在后台使用SSH?
mwfearnley 2015年

请注意,格式类似于ls -l。在我的系统上,似乎没有列出所有文件的选项。
乔纳森

6

对于所有通过google来问这个问题的人,因为他们正在寻找列出远程文件但无法通过ssh(备份服务器的常见情况)访问远程服务器的方法,则可以使用“ sftp”。

例:

sftp username@hostname.xyz
ls
cd somedir
exit

在特定的远程目录中启动交互式会话:

sftp [user@]host[:dir]

3

是。SSH并执行ls

ssh host ls /path

您可以轻松地对此编写脚本以使其更加灵活,或者使用host:path语法scp使用。


1

我发现我最常用的方法是获取ls结果,一个没有所有权限和日期等的简单文件列表,并将其保存在本地文件中。

{ ssh me@host.com "cd /dir/of/interest; ls -1f *.txt;" } > /home/me/listoffiles.txt

您可以在引号内运行任何所需的内容。所有输出最终都存储在本地文本文件中。或者,如果您想在服务器上运行一个庞大的脚本,并捕获其所有输出,甚至包括错误:

{ ssh me@host.com <script.remote.sh } > /home/me/output.log 2>/home/me/output.err

1
在第二行代码中,{ }不需要。
glglgl 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.