我经常使用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)