SCP 文件名制表符补全

SCP 文件名制表符补全

我经常使用 SCP 在服务器之间移动文件,并且我听说如果您使用公钥则可以在远程服务器上使用制表符补全,但到目前为止我还没有运气。

我想要实现的目标如下:

scp -r remote.ip.address:/remote/dir/folder<TAB> /local/destiation/

远程服务器ls上将/dir/显示 3 个文件夹:

/remote/dir/folder_1
/remote/dir/folder_2
/remote/dir/folder_3

我希望 SCP 能够显示哪些文件夹匹配(如果有),就像在本地文件系统中导航时使用普通路径补全一样。Tab 补全在命令行中对本地路径有效scp,但我注意到,当远程计算机的路径与本地路径匹配时(即:“~/”),它会从本地文件系统而不是远程文件系统完成/建议文件/文件夹。

运行以下命令可实现无密码登录:

`ssh remote.ip.address`

...所以我知道按键设置正确。有什么办法可以让它正常工作吗?

答案1

您使用的是哪种 shell?如果您使用的是 bash,则可能需要在 bash 中启用“高级”补全功能...

if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi

在你的 ~/.bashrc 中

在 OSX 上你可以执行以下操作:

$ sudo port install bash-completion

在你的 ~/.profile 中添加:

if [ -f /opt/local/etc/bash_completion ]; then
    . /opt/local/etc/bash_completion
fi

答案2

如果有人想用 rkthkr 的方法在 Mac OSX Mountain Lion 上执行此操作,他们必须安装 Mac Ports (http://www.macports.org/install.php)首先,运行他提到的命令:

$ sudo port install bash-completion

然后按照此处的说明配置他们的终端应用程序:https://trac.macports.org/wiki/howto/bash-completion

答案3

另一个可能更简单的解决方案是使用SSHFS

这是一个基于 SSH 文件传输协议的文件系统客户端。由于大多数 SSH 服务器已经支持此协议,因此设置起来非常容易:即在服务器端无需执行任何操作。在客户端,安装文件系统就像使用 ssh 登录服务器一样简单。

它是保险丝基于文件系统的远程文件夹与本地文件夹相链接。在底层使用 scp,但您可以cp像在本地机器上复制文件一样操作该命令。因此,tab 补全自动工作!SSHFS适用于大多数发行版,例如 do sudo apt-get install sshfs(这也会加载fuse内核模块)

像这样开始:

$ sudo mkdir /mnt/server1
$ sudo chown local-username /mnt/server1
$ sshfs [email protected]:/home/remote-username /mnt/server1
$ ls /mnt/server1
 .. <bunch of files> ...
$ cp /mnt/server1/.bash<tab><tab>
.bash_history  .bash_logout   .bashrc
$ cp /mnt/server1/.bashrc .

答案4

我强烈建议使用雅富

它支持文件名完成,并且还具有一些其他有用的功能(例如递归 get/put/fxp/ls/rm)

相关内容