2013-02-05 7 views
29

scpbashにコピーして、ファイル名にコロン(:)文字をコピーしようとしています。私が使用している私のコマンドの難読化されたバージョンは、次のとおりです。ファイル名にコロンを付けてファイルをscpするにはどうしたらいいですか?

scp file\:\ name.mp4 [email protected]:"/path/to/dest" 

私はこのエラーを取得する:

ssh: Could not resolve hostname Portal 2: Name or service not known 

私はちょうどファイルの名前を変更し、:を削除し、私はしたいのですが可能性が知っていますコロンから逃げることができるかどうかを知る。

問題をエスケープ

答えて

51

ないかなりbash、それはscp [ユーザー@]ホストプレフィックスとしてx:の治療だ、試してみてください。

scp ./file:\ name.mp4 [email protected]:"/path/to/dest" 

(例えば./)相対的または完全修飾パス(/path/to/source)を使用するには、この動作を防ぎます - :の前に/が存在すると、OpenSSHは可能なhost:または[email protected]:という接頭辞のチェックを停止します)。 OpenSSHのscp特殊ケースのファイル名はとなります。はコロンで問題なく動作しますが、通常の意味で:をエスケープするサポートはなく、:のほとんどのファイル名で有効なホスト名の概念はありません。これを引き起こします。

により []囲まれたIPv6アドレスのOpenSSHのの単純化した解析に

(、することができます成功し[で始まる、または:@[が含まれていると]:が含まれていませんが、それは;-)

一般的に有用ではありません :を含む scpファイル

original questionそれはその状況に適用される?私はbashでコロンをエスケープするにはどうすればよいだったが、ないようにする場合、以下のテキストが書かれていたシェルエスケープの無い量としてscpが役立ちます。)

について方法:を逃れるために、質問に答えるために、あなたがする必要はありませんが、「\:」作品。

  1. をヌルコマンド:、エスケープする必要はありません、あなたはできますが、あなたは脱出する場合、それは、コマンドには効果(「影響なし」は、完全に真実ではありませんしていないだけで\e\c\h\o fooのように::が使用されている場所1文字以上、それは)
  2. PATHに一致しているエイリアスを防ぐことができます(その他、CDPATHMAILPATH)が値をエスケープ有用な効果(私は:を含むディレクトリからの私のPATHに、プログラムを実行することができませんでしたを持っていません、少し予期しない)
  3. パラメータ拡張${name:-x}多く、name[a-zA-Z_][a-zA-Z0-9_]、変数名をエスケープするので、不要でなければならない、とあいまい、
  4. ? :トライナリのみを変数と数字上で動作パラメータ展開の他のバリエーションで、その後の:をエスケープする必要はありません、必要はありませんので、 [[:digit:]]ようなパターンのクラスと
  5. ===~を逃れるために、あなたは\:で脱出することができますが、私は...それは今までに役に立つかもしれない方法として損失でコマンドや関数名内
  6. 、必要ですん脱出するには、\:は有効な効果がありません

(この点で、それは#fooという名前のコマンドがする必要があるでしょう#に違う、ヌルコマンドはちょうど:で、あなたは「:foo」のような名前のコマンドや関数を持つことができ、それはエスケープせずに呼び出すことができることに注意してください)

+1

同じ問題が 'rsync'に影響します。幸いなことに、ファイル名の前に '。/'を付けるという同じ解決策もあります。 –

関連する問題