Vervollständigung der Registerkarte "SCP-Dateiname"


13

Ich verwende SCP regelmäßig, um Dateien zwischen Servern zu verschieben, und es wird gemunkelt, dass Sie die Tab-Vervollständigung auf dem Remote-Server verwenden können, wenn Sie öffentliche Schlüssel verwenden. Bisher hatte ich jedoch kein Glück.

Was ich versuche zu erreichen, ist das folgende:

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

Ein lsauf dem Remote-Server von /dir/würde 3 Ordner aufdecken:

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

Ich möchte, dass SCP anzeigt, welche Ordner übereinstimmen (falls vorhanden), genau wie die normale Pfadvervollständigung beim Navigieren im lokalen Dateisystem. Die Tab-Vervollständigung funktioniert auf den lokalen Pfaden in der scpBefehlszeile, aber mir ist aufgefallen, dass, wenn der Pfad für den Remotecomputer mit dem lokalen übereinstimmt (dh: "~ /"), Dateien / Ordner aus dem lokalen Dateisystem vervollständigt / vorgeschlagen werden als die Fernbedienung.

Das Ausführen des folgenden Befehls funktioniert für die Anmeldung ohne Kennwort:

`ssh remote.ip.address`

... damit ich weiß, dass die Tasten richtig eingerichtet sind. Irgendwelche Ideen, wie man das zum Laufen bringt?


Habe gerade diese - omgbbq
William Entriken

Antworten:


16

Welche Shell benutzt du? Wenn Sie Bash verwenden, müssen Sie möglicherweise "erweiterte" Vervollständigungen in Bash aktivieren ...

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

In Ihrem ~ / .bashrc

Unter OSX können Sie Folgendes tun:

$ sudo port install bash-completion

Fügen Sie Ihrem ~ / .profile hinzu:

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

Ich verwende OSX als Workstation, diese Datei existiert nicht. Ich gehe jedoch davon aus, dass ich bei jeder Distribution das Bash-Completion-Paket installieren muss, damit dies funktioniert.

Ich werde meine Antwort aktualisieren ..
rkthkr

Ich habe diese Schritte gerade selbst durchlaufen, alles funktioniert gut. Danke Kumpel!

Kein Problem, wir helfen gerne weiter!
Rkthkr

1
Natürlich funktioniert die Port-Installation für OS X nur, wenn Sie das MacPorts-Paket (www.macports.org) installiert haben. Und ich denke, es gibt ein Paket, falls Sie fink anstelle von MacPorts verwenden sollten.
Sven

2

Wenn jemand dies mit der Methode von rkthkr für Mac OSX Mountain Lion tun möchte, muss er zuerst Mac Ports ( http://www.macports.org/install.php ) installieren und den von ihm erwähnten Befehl ausführen:

$ sudo port install bash-completion

Konfigurieren Sie dann die Terminal-App anhand der folgenden Anweisungen: https://trac.macports.org/wiki/howto/bash-completion


Wenn Sie genug Ruf haben, um Kommentare zu hinterlassen, funktionieren Ergänzungen zu vorhandenen Antworten normalerweise besser mit diesen. (Wenn Sie die Antworten nicht bearbeiten
Andrew B

Vielen Dank. Das wollte ich tun, aber wie Sie sagten, hatte ich nicht genug Repräsentanten, um das zu tun.
Shawn Conn

0

Eine andere, vielleicht einfachere Lösung ist die Verwendung von sshfs .

Dies ist ein Dateisystemclient, der auf dem SSH-Dateiübertragungsprotokoll basiert. Da die meisten SSH-Server dieses Protokoll bereits unterstützen, ist es sehr einfach einzurichten: dh auf der Serverseite gibt es nichts zu tun. Auf der Clientseite ist das Mounten des Dateisystems so einfach wie das Einloggen in den Server mit ssh.

Es ist ein auf Sicherungen basierendes Dateisystem, das Ihren Remote-Ordner mit einem lokalen verknüpft. Unter der Haube wird scp verwendet, aber Sie können den cpBefehl genauso ausführen wie das Kopieren von Dateien auf Ihrem lokalen Computer. Somit funktioniert die Tab-Vervollständigung automatisch! sshfs ist für die meisten Distributionen verfügbar, zB do sudo apt-get install sshfs(dies lädt auch das fuseKernelmodul)

Beginne so:

$ sudo mkdir /mnt/server1
$ sudo chown local-username /mnt/server1
$ sshfs remote-username@server1.example.com:/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 .

0

Ich empfehle dringend die Verwendung von yafc .

Es unterstützt die Vervollständigung von Dateinamen und hat einige andere nützliche Funktionen (zB rekursives get / put / fxp / ls / rm)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.