Sometimes I need to quickly copy a file from my remote server to my local machine. Here's my current workflow:
- I SSH into my remote server, find the file and copy its full path.
- I open new terminal tab and type:
sftp user@hostname:/path/to/file
(where /path/to/file is the path I previously copied)
It's not such a pain but it would be really nice if I could skip step 1 and find the path to the file using tab completion directly when typing the sftp command.
To illustrate, I could start typing sftp user@hostname:/
press TAB and get a listing of folders in /. I could then go on typing ho
press TAB and it would auto-complete to home
, etc. etc.
I'm not sure if such a feature exists and otherwise, is it theoretically possible to write a custom tab completion script as described? Any pointers on where to start?
Thanks to shellholic's answer, I was able to make it (somewhat) work for sftp. First, create the file
/etc/bash_completion.d/sftp
with the following content:Then in bash you need to execute
. /etc/bash_completion.d/sftp
in order to load the script.All I really did was copy/paste the scp completion script from
/etc/bash_completion.d/ssh
and replace scp occurences with sftp.Another alternative: use
lftp
instead, which has superb built in tab completion (but that'll be once you start it, not in the shell.) It can talk sftp and many other protocols.Don't use
sftp
, usescp
and it work. You will need an ssh key.I hear that a program called with-readline will allow the standard OpenSSH command line program sftp to utilize tab completion. I cannot verify that it works, but I've been wanting that same functionality for years now.
info on with-readline and sftp: http://www.greenend.org.uk/rjk/2005/withreadline.html
with-readline link: http://www.greenend.org.uk/rjk/2005/with-readline-0.1.tar.bz2
Let me know how it works for you.