Finalización de la pestaña de nombre de archivo SCP

13

Utilizo SCP regularmente para mover archivos entre servidores y he escuchado rumores de que puedes usar la finalización de pestañas en el servidor remoto si estás usando claves públicas, pero hasta ahora no he tenido suerte.

Lo que intento lograr es lo siguiente:

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

Un lsen el servidor remoto de /dir/revelaría 3 carpetas:

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

Me gustaría que SCP revele qué carpetas coinciden (si corresponde), al igual que la finalización normal de la ruta al navegar por el sistema de archivos local. La finalización de tabulación funciona en las rutas locales en la scplínea de comando, pero he notado que cuando la ruta de la máquina remota coincide con la local (es decir: "~ /"), completa / sugiere archivos / carpetas del sistema de archivos local. que el control remoto

Ejecutar los siguientes trabajos para el inicio de sesión sin contraseña:

`ssh remote.ip.address`

... así que sé que las teclas están configuradas correctamente. ¿Alguna idea sobre cómo hacer que esto funcione?

rkthkr
fuente
Acabo de usar esto - omgbbq
William Entriken

Respuestas:

16

¿Qué caparazón estás usando? Si está utilizando bash, es posible que deba habilitar las finalizaciones "avanzadas" en bash ...

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

En tu ~ / .bashrc

En OSX puedes hacer:

$ sudo port install bash-completion

A su ~ / .profile agregue:

if [ -f /opt/local/etc/bash_completion ]; then
    . /opt/local/etc/bash_completion
fi
rkthkr
fuente
Estoy usando OSX como estación de trabajo, ese archivo no existe. Sin embargo, ¿estoy asumiendo que con cualquier distribución necesito instalar el paquete bash-complete para que esto funcione?
Voy a actualizar mi respuesta ..
rkthkr
Acabo de terminar esos pasos yo mismo, todo funciona bien. ¡Gracias amigo!
¡No hay problema, es un gusto ayudar!
rkthkr
1
Por supuesto, la parte de instalación del puerto para OS X solo funciona si ha instalado el paquete MacPorts (www.macports.org). Y supongo que hay un paquete disponible si debe usar fink en lugar de MacPorts.
Sven
2

Si alguien quiere hacer esto para Mac OSX Mountain Lion con el método de rkthkr, primero deben instalar los puertos de Mac ( http://www.macports.org/install.php ), ejecute el comando que mencionó:

$ sudo port install bash-completion

luego configure su aplicación de terminal según estas instrucciones que se encuentran aquí: https://trac.macports.org/wiki/howto/bash-completion

Shawn Conn
fuente
Cuando tienes suficiente reputación para dejar comentarios, las adiciones a las respuestas existentes generalmente funcionan mejor con ellas. (si no va a editar las respuestas)
Andrew B
Gracias. Eso es lo que quería hacer, pero, como mencionaste, no tenía suficiente representante para hacerlo.
Shawn Conn
0

Otra solución, quizás más simple, es usar sshfs .

Este es un cliente de sistema de archivos basado en el Protocolo de transferencia de archivos SSH. Dado que la mayoría de los servidores SSH ya admiten este protocolo, es muy fácil de configurar: es decir, en el lado del servidor no hay nada que hacer. En el lado del cliente, montar el sistema de archivos es tan fácil como iniciar sesión en el servidor con ssh.

Es un sistema de archivos basado en fusibles que vincula su carpeta remota a una local. Debajo del capó, se usa scp, pero puede operar el cpcomando al igual que copiar archivos en su máquina local. Por lo tanto, la finalización de pestañas funciona automáticamente. sshfs está disponible para la mayoría de las distribuciones, por ejemplo do sudo apt-get install sshfs(esto también carga el fusemódulo del kernel)

Inicia así:

$ 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 .
Sebastian
fuente
0

Recomiendo usar yafc .

Admite la finalización de nombre de archivo y también tiene algunas otras características útiles (por ejemplo, get / put / fxp / ls / rm recursivo)

jamespo
fuente