SCP文件名选项卡完成

我经常使用SCP来在服务器之间移动文件,而且我听说有传言说如果你使用公钥,可以在远程服务器上使用tab-completion,但是到目前为止我没有运气。

我想要做的是以下几点:

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

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

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

我想让SCP揭示哪些文件夹匹配(如果有的话),就像正常的path完成时浏览本地文件系统。 Tab完成在scp命令行的本地path上工作,但是我注意到当远程机器的path匹配本地(即:“〜/”)时,它从本地文件系统完成/build议文件/文件夹而不是遥控器。

运行以下工作以进行无密码login:

 `ssh remote.ip.address` 

…所以我知道这些按键设置正确。 任何想法如何得到这个工作?

你在用哪种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 

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

 $ sudo port install bash-completion 

然后按照以下说明configuration其terminal应用程序: https : //trac.macports.org/wiki/howto/bash-completion

另一个也许更简单的解决scheme是使用sshfs

这是一个基于SSH文件传输协议的文件系统客户端。 由于大多数SSH服务器已经支持这个协议,所以很容易设置:即在服务器端没有任何事情要做。 在客户端安装文件系统就像使用sshlogin到服务器一样简单。

这是一个基于熔丝的文件系统,它将您的远程文件夹链接到本地​​文件夹。 底下,使用scp,但您可以像在本地计算机上复制文件一样操作cp命令。 因此, 制表符自动完成工作! sshfs可用于大多数发行版,例如: 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 . 

我强烈build议使用yafc 。

它支持文件名完成,还有其他一些有用的function(例如recursionget / put / fxp / ls / rm)