Завершення вкладки імені файлу SCP


13

Я регулярно використовую SCP для переміщення файлів між серверами, і я чув, що можна використовувати доповнення табуляції на віддаленому сервері, якщо ви використовуєте відкриті ключі, але поки що мені не пощастило.

Я намагаюся досягти наступного:

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

На lsвіддаленому сервері програми /dir/буде виявлено 3 папки:

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

Я хотів би, щоб SCP виявив, які папки відповідають (якщо такі є), як і звичайне завершення шляху під час навігації по локальній файловій системі. Завершення вкладки працює в локальних шляхах в scpкомандному рядку, але я помітив, що коли шлях для віддаленої машини відповідає локальному (тобто: "~ /"), він швидше доповнює / пропонує файли / папки з локальної файлової системи ніж віддалений.

Запуск наступних робіт для входу без пароля:

`ssh remote.ip.address`

... тож я знаю, що ключі налаштовані правильно. Будь-які ідеї, як це зробити?


Щойно використав це - omgbbq
Вільям Ентрікен

Відповіді:


16

Яку оболонку ви використовуєте? Якщо ви використовуєте bash, вам може знадобитися включити "розширені" завершення в bash ...

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

У вашому ~ / .bashrc

У OSX ви можете:

$ sudo port install bash-completion

До вашого ~ / .profile додайте:

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

Я використовую OSX як робочу станцію, цей файл не існує. Однак я припускаю, що при будь-якому перекруті мені потрібно встановити пакет bash-завершення, щоб змусити це працювати?


Я щойно закінчив сам пройти ці кроки, все працює добре. Дякую, друже!

Без проблем, раді допомогти!
rkthkr

1
Звичайно, частина встановлення портів для ОС X працює лише в тому випадку, якщо ви встановили пакет MacPorts (www.macports.org). І я думаю, що є пакет, якщо ви повинні використовувати фінка замість MacPorts.
Свен

2

Якщо хтось хоче зробити це для Mac OSX Mountain Lion методом rkthkr, він повинен спочатку встановити порти Mac ( http://www.macports.org/install.php ), запустити команду, яку він згадав:

$ sudo port install bash-completion

потім налаштуйте їх термінальний додаток відповідно до цих інструкцій, знайдених тут: https://trac.macports.org/wiki/howto/bash-completion


Коли у вас достатньо репутації, щоб залишити коментарі, доповнення до існуючих відповідей зазвичай краще працюють з ними. (якщо ви не збираєтесь редагувати відповіді)
Andrew B

Спасибі. Це те, що я хотів зробити, але, як ви згадали, у мене не було достатньої кількості представників для цього.
Шон Конн

0

Іншим, можливо, більш простим рішенням є використання sshfs .

Це клієнт файлової системи, заснований на протоколі передачі файлів SSH. Оскільки більшість серверів SSH вже підтримують цей протокол, налаштувати його дуже просто: тобто на стороні сервера нічого робити. На стороні клієнта встановити файлову систему так само просто, як увійти на сервер за допомогою ssh.

Це файлова система на основі запобіжників, яка пов'язує вашу віддалену папку з локальною. Під кришкою використовується scp, але ви можете керувати cpкомандою так само, як копіювати файли на локальній машині. Таким чином, заповнення вкладки працює автоматично! sshfs доступний для більшості дистрибутивів, наприклад do sudo apt-get install sshfs(це також завантажує fuseмодуль ядра)

Почніть так:

$ 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

Настійно рекомендую використовувати yafc .

Він підтримує завершення імені файлу і має деякі інші корисні функції (наприклад, рекурсивний get / put / fxp / ls / rm)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.