Achèvement de l'onglet du nom de fichier SCP

13

J'utilise SCP régulièrement pour déplacer des fichiers entre les serveurs et j'ai entendu dire que vous pouvez utiliser la tabulation sur le serveur distant si vous utilisez des clés publiques, mais jusqu'à présent, je n'ai pas eu de chance.

Ce que j'essaie d'accomplir est le suivant:

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

Un lssur le serveur distant /dir/révélerait 3 dossiers:

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

J'aimerais que SCP révèle quels dossiers correspondent (le cas échéant), tout comme l'achèvement normal du chemin lors de la navigation dans le système de fichiers local. L'achèvement de tabulation fonctionne sur les chemins locaux dans la scpligne de commande, mais j'ai remarqué que lorsque le chemin de la machine distante correspond au local (c'est-à-dire: "~ /"), il complète / suggère des fichiers / dossiers à partir du système de fichiers local plutôt que la télécommande.

L'exécution des travaux suivants pour une connexion sans mot de passe:

`ssh remote.ip.address`

... donc je sais que les touches sont correctement configurées. Des idées sur la façon de faire fonctionner cela?

rkthkr
la source
Je viens de l'utiliser - omgbbq
William Entriken

Réponses:

16

Quel shell utilisez-vous? Si vous utilisez bash, vous devrez peut-être activer les complétions "avancées" dans bash ...

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

Dans votre ~ / .bashrc

Sur OSX, vous pouvez faire:

$ sudo port install bash-completion

À votre ~ / .profile, ajoutez:

if [ -f /opt/local/etc/bash_completion ]; then
    . /opt/local/etc/bash_completion
fi
rkthkr
la source
J'utilise OSX comme poste de travail, ce fichier n'existe pas. Cependant, je suppose qu'avec toute distrubtion je dois installer le paquet bash-complètement pour que cela fonctionne?
Je
mettrai à
Je viens de terminer moi-même ces étapes, tout fonctionne bien. Merci mon pote!
Pas de problème, heureux de vous aider!
rkthkr
1
Bien sûr, la partie d'installation de port pour OS X ne fonctionne que si vous avez installé le package MacPorts (www.macports.org). Et je suppose qu'il y a un package disponible si vous devez utiliser fink au lieu de MacPorts.
Sven
2

Si quelqu'un souhaite le faire pour Mac OSX Mountain Lion avec la méthode de rkthkr, il doit d'abord installer les ports Mac ( http://www.macports.org/install.php ), exécutez la commande qu'il a mentionnée:

$ sudo port install bash-completion

puis configurez leur application de terminal selon ces instructions trouvées ici: https://trac.macports.org/wiki/howto/bash-completion

Shawn Conn
la source
Lorsque vous avez suffisamment de réputation pour laisser des commentaires, les ajouts aux réponses existantes fonctionnent généralement mieux avec ceux-ci. (si vous n'allez pas modifier les réponses)
Andrew B
Merci. C'est ce que je voulais faire mais, comme vous l'avez mentionné, je n'avais pas assez de représentants pour le faire.
Shawn Conn
0

Une autre solution, peut-être plus simple, utilise sshfs .

Il s'agit d'un client de système de fichiers basé sur le protocole de transfert de fichiers SSH. Étant donné que la plupart des serveurs SSH prennent déjà en charge ce protocole, il est très facile à configurer: c'est-à-dire que côté serveur, il n'y a rien à faire. Côté montage, le système de fichiers est aussi simple que de se connecter au serveur avec ssh.

Il s'agit d'un système de fichiers basé sur des fusibles qui relie votre dossier distant à un dossier local. Sous le capot, scp est utilisé, mais vous pouvez utiliser la cpcommande comme pour copier des fichiers sur votre machine locale. Ainsi, la complétion des onglets fonctionne automatiquement! sshfs est disponible pour la plupart des distributions, par exemple do sudo apt-get install sshfs(cela charge également le fusemodule du noyau)

Commencer comme ça:

$ 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 .
Sébastien
la source
0

Je recommande fortement d'utiliser yafc .

Il prend en charge l'achèvement du nom de fichier et possède également d'autres fonctionnalités utiles (par exemple, récursif get / put / fxp / ls / rm)

jamespo
la source