これは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したくないことにも注意してください。目標は、現在のディレクトリ自体を新しい場所にコピーすることです(つまり、新しいディレクトリを作成します)。
この以前の回答 によると、犯人は CVE-2017-20685 です。明らかに、悪意のあるリモートホストが不適切な名前の検証を悪用する可能性があるため、scpのパスでの_.
_のサポートは無効になっています。回避策は、_.
_を$(pwd)
に置き換えることです。
.
は、${PWD}
、pwd
、readlink -f .
などを使用して、完全なパスに展開できます。
scp -r "${PWD}" ${remote}:${dst_path}