web-dev-qa-db-ja.com

SCPファイル名タブの補完

私は定期的にSCPを使用してサーバー間でファイルを移動し、公開鍵を使用している場合はリモートサーバーでタブ補完を使用できるとの噂を聞いていますが、これまでのところ運がありません。

私が達成しようとしていることは次のとおりです。

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

/dir/のリモートサーバー上のlsは、次の3つのフォルダーを表示します。

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

ローカルファイルシステムをナビゲートするときの通常のパス完了と同じように、SCPでどのフォルダーが一致するか(存在する場合)を明らかにしたいと思います。タブ補完はscpコマンドラインのローカルパスで機能しますが、リモートマシンのパスがローカルと一致する場合(例: "〜/")、ファイルを補完/推奨することに気づきました/リモートではなくローカルファイルシステムからのフォルダ。

次のコマンドを実行すると、パスワードなしのログインで機能します。

`ssh remote.ip.address`

...だから私はキーが正しく設定されていることを知っています。これを機能させる方法に関するアイデアはありますか?

13
user7195

どのシェルを使用していますか? 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
16
rkthkr

Rkthkrの方法でMacOSX Mountain Lionに対してこれを実行したい場合は、最初にMac Ports( http://www.macports.org/install.php )をインストールし、コマンドheを実行する必要があります。言及:

$ Sudo port install bash-completion

次に、次の手順に従ってターミナルアプリを構成します。 https://trac.macports.org/wiki/howto/bash-completion

2
Shawn Conn

別の、おそらくもっと簡単な解決策は、 sshfs を使用することです。

これは、SSHファイル転送プロトコルに基づくファイルシステムクライアントです。ほとんどのSSHサーバーはすでにこのプロトコルをサポートしているため、セットアップは非常に簡単です。つまり、サーバー側では何もする必要はありません。クライアント側では、ファイルシステムのマウントは、sshを使用してサーバーにログインするのと同じくらい簡単です。

これはFuseベースのファイルシステムであり、リモートフォルダをローカルフォルダにリンクします。内部ではscpが使用されますが、ローカルマシンにファイルをコピーするのと同じようにcpコマンドを操作できます。したがって、tab-completionは自動的に機能します! sshfsは、ほとんどのディストリビューションで使用できます。行う Sudo apt-get install sshfs(これによりFuseカーネルモジュールもロードされます)

このように始めます:

$ 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 .
0
Sebastian

yafc を使用することを強くお勧めします。

ファイル名の補完をサポートし、他のいくつかの便利な機能もあります(例:再帰的なget/put/fxp/ls/rm)

0
jamespo