查看 SCP 中的文件名

查看 SCP 中的文件名

我用来scp将文件从远程服务器复制到本地服务器。真正不舒服的是我需要精确地输入文件路径。我习惯于依赖自动完成,因为文件名和文件夹结构可能很长。我希望能够看到每个目录中的文件名并自动完成,就像在本地浏览文件时一样。

现在,我可以单独执行 SSH、查找文件名并在 SCP 命令中使用它们。但当然,这将是巨大的精力浪费。另外,我可以使用 GUI,但我更愿意避免使用,因为命令行更轻量级。

有什么方法可以使用 SCP 而不必准确记住文件名吗?

答案1

bash-completion(在 Cygwin、Debian、Ubuntu 和毫无疑问的许多其他发行版中都可用)支持scp自动完成,只要 shell 可以在没有提示的情况下访问所需的服务器(它ssh在批处理模式下使用,请参阅ssh_config(5)手册页了解详情)。

启用此功能的最简单方法是使用ssh-agent.您的桌面环境可能默认启用此功能;只是尝试

ssh-add

将默认密钥添加到当前运行的代理(如果有)。如果没有代理正在运行,您可以通过运行来启动代理

eval $(ssh-agent)

一旦代理知道您的密钥,您将能够自动完成scp涉及可以使用该密钥访问的服务器的命令。

我很确定zsh也支持scp自动完成,但有同样的注意事项; Debian 中的软件包包含必要的支持zsh-common。它需要在你的.zshrc想法中启用,比如

autoload -U compinit && compinit

(加载所有支持的完成)。

答案2

Zsh 具有远程scp完成功能,但您需要确保不使用某些包装函数的别名,例如非官方的glob_scp,或者如果您有的话,可以添加相同的完成机制,例如:

compdef glob_scp=scp

您会注意到,zsh它将在需要时正确引用特殊字符*(尽管这可能看起来很奇怪)。现在bash-completion 不这样做,尽管失败应该不常见。

或者,特别是对于没有远程scp完成功能的 shell,您可以使用sftpor sshfs

  • sftp有自己的完成系统。
  • sshfs允许您通过 SSH 挂载远程目录,这样就足以cp与通常的完成系统一起使用。

相关内容