Завершение вкладки имени файла 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
Уильям Entriken

Ответы:


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
Конечно, часть установки порта для OS X работает, только если вы установили пакет MacPorts (www.macports.org). И я думаю, что есть пакет, если вы должны использовать Fink вместо 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.