Uzupełnianie zakładki SCP z nazwą pliku


13

Używam SCP regularnie do przenoszenia plików między serwerami i słyszałem plotki, że możesz używać uzupełniania tabulatorów na zdalnym serwerze, jeśli używasz kluczy publicznych, ale jak dotąd nie miałem szczęścia.

To, co próbuję osiągnąć, jest następujące:

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

Na lszdalnym serwerze /dir/ujawniłby 3 foldery:

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

Chciałbym, aby SCP ujawnił, które foldery pasują (jeśli istnieją), podobnie jak normalne uzupełnianie ścieżki podczas nawigacji po lokalnym systemie plików. Uzupełnianie tabulatorów działa na lokalnych ścieżkach w scpwierszu poleceń, ale zauważyłem, że gdy ścieżka zdalnego komputera pasuje do lokalnego (tj: „~ /”), uzupełnia / sugeruje pliki / foldery z lokalnego systemu plików niż pilot.

Uruchomienie następujących funkcji logowania bez hasła:

`ssh remote.ip.address`

... więc wiem, że klucze są poprawnie skonfigurowane. Wszelkie pomysły na to, jak to zrobić?


Właśnie tego użyłem - omgbbq
William Entriken

Odpowiedzi:


16

Jakiej powłoki używasz? Jeśli używasz bash, może być konieczne włączenie „zaawansowanych” uzupełnień w bash ...

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

W twoim ~ / .bashrc

W OSX możesz wykonać:

$ sudo port install bash-completion

Do swojego ~ / .profile dodaj:

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

Używam OSX jako stacji roboczej, ten plik nie istnieje. Jednak zakładam, że przy każdym rozproszeniu muszę zainstalować pakiet bash-complete, aby to zadziałało?

Zaktualizuję swoją odpowiedź ..
rkthkr

Właśnie skończyłem te kroki, wszystko działa dobrze. Dzięki stary!

Nie ma problemu, chętnie Ci pomożemy!
rkthkr

1
Oczywiście część instalacyjna portu dla OS X działa tylko, jeśli zainstalowałeś pakiet MacPorts (www.macports.org). Sądzę, że jest dostępny pakiet, jeśli powinieneś użyć Fink zamiast MacPorts.
Sven

2

Jeśli ktoś chce to zrobić dla Mac OSX Mountain Lion metodą rkthkr, musi najpierw zainstalować porty Mac ( http://www.macports.org/install.php ), uruchom polecenie, o którym wspomniał:

$ sudo port install bash-completion

następnie skonfiguruj aplikację terminalu zgodnie z instrukcjami podanymi tutaj: https://trac.macports.org/wiki/howto/bash-completion


Gdy masz wystarczająco dużo reputacji, aby dodawać komentarze, dodatki do istniejących odpowiedzi zwykle działają lepiej z nimi. (jeśli nie zamierzasz edytować odpowiedzi)
Andrew B

Dzięki. Właśnie to chciałem zrobić, ale, jak wspomniałeś, nie miałem wystarczającej liczby przedstawicieli, aby to zrobić.
Shawn Conn

0

Innym, może prostszym rozwiązaniem jest użycie sshfs .

Jest to klient systemu plików oparty na protokole transferu plików SSH. Ponieważ większość serwerów SSH obsługuje już ten protokół, konfiguracja jest bardzo łatwa: tzn. Po stronie serwera nie ma nic do zrobienia. Po stronie klienta montaż systemu plików jest tak prosty, jak zalogowanie się na serwerze za pomocą ssh.

Jest to oparty na bezpiecznikach system plików, który łączy folder zdalny z folderem lokalnym. Pod maską używany jest scp, ale można obsługiwać cppolecenie tak samo, jak kopiowanie plików na komputerze lokalnym. Zatem uzupełnianie tabulatorów działa automatycznie! sshfs jest dostępny dla większości dystrybucji, np. do sudo apt-get install sshfs(ładuje to również fusemoduł jądra)

Zacznij tak:

$ 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

Zdecydowanie polecam używanie yafc .

Obsługuje uzupełnianie nazw plików i ma również inne przydatne funkcje (np. Rekurencyjne get / put / fxp / ls / rm)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.