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-completionパッケージをインストールする必要があると考えていますか?

私は私の答えを更新します...
rkthkr

私はこれらの手順を自分で完了しましたが、すべてうまくいきます。どうも!

問題ありません、喜んでお手伝いします!
rkthkr 09年

1
もちろん、MacPortsパッケージ(www.macports.org)をインストールした場合にのみ、OS Xのポートインストール部分が機能します。そして、MacPortsの代わりにfinkを使用する必要がある場合、利用可能なパッケージがあると思います。
スヴェン

2

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

$ sudo port install bash-completion

次に、これらの指示に従って端末アプリを構成します:https : //trac.macports.org/wiki/howto/bash-completion


あなたがコメントを残すのに十分な評判を持っているとき、既存の回答への追加は通常それらによりうまく機能します。(答えを編集しない場合)
アンドリュー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)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.