web-dev-qa-db-ja.com

Scp現在のディレクトリ `.`を別の名前に

これはEdgeの使用例ですが、解決策が見つかりません。

現在のディレクトリ.を、その名前がわからない、または気にせずに、新しいディレクトリにコピーしたい。 scpを使用します。

Bashには問題がないようです。例えばcp -r . ../new-nameは、問題なく新しいディレクトリのコピーを生成します。しかし、scp -r . Host:new-nameを使用すると、scp: error: unexpected filename: .が得られます

私が使用している回避策は、rsyncの代わりにscpを使用するか、scp -r ../current-nameの代わりにscp -r .を使用することです。しかし、明白な方法がscpで機能しない理由と、より簡単な「修正」があるかどうかを理解するのは良いことです。

また、scp -r ./* Host:existing-dir/のように、現在のディレクトリの内容を別の既存のディレクトリにscpしたくないことにも注意してください。目標は、現在のディレクトリ自体を新しい場所にコピーすることです(つまり、新しいディレクトリを作成します)。

8
gcb

この以前の回答 によると、犯人は CVE-2017-20685 です。明らかに、悪意のあるリモートホストが不適切な名前の検証を悪用する可能性があるため、scpのパスでの_._のサポートは無効になっています。回避策は、_._を$(pwd)に置き換えることです。

20
gnubeard

.は、${PWD}pwdreadlink -f .などを使用して、完全なパスに展開できます。

scp -r "${PWD}" ${remote}:${dst_path}
10
Attie