LinuxターミナルからWindowsシステムにファイルをプッシュするには、次の2つの例で問題なく動作します。
scp /home/user.name/file.html [email protected]:/C:/Users/user.name/test_folder/file.html
scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test_folder/file.html"
ローカルフォルダにスペースがあり、名前を変更できない場合、たとえば/C:/Users/user.name/test folder/
の場合にこれを行う必要があります。
次のすべてがメッセージscp: ambiguous target
で失敗します
scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test folder/file.html"
scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test\ folder/file.html"
scp /home/user.name/file.html [email protected]:"'/C:/Users/user.name/test\ folder/file.html'"
scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test\\ folder/file.html"
scp /home/user.name/file.html [email protected]:"'/C:/Users/user.name/test\\ folder/file.html'"
scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test\\\ folder/file.html"
scp /home/user.name/file.html [email protected]:"'/C:/Users/user.name/test\\\ folder/file.html'"
これを機能させるにはどうすればよいですか?
完全な引数の前後にquotes '
またはDouble quotes "
を使用してみてください。
コメントの@dirktで示唆されているように、sshホストの完全なパス引数を引用すると機能するはずです。それはあなたのコマンドをこのようにします:
scp /home/user.name/file.html '[email protected]:/C:/Users/user.name/test folder/'
フォルダ名の間にescape sequence for space
を使用します。
スペースのエスケープシーケンスである\
(スペースを含むバックスラッシュ)を使用できます。それはあなたのコマンドをこのようにします:
scp /home/user.name/file.html '[email protected]:/C:/Users/user.name/test\ folder/'
test
とfolder
の間にスペースがある\
に注意してください。これにより、test\ folder
になります。
need to escape twice
最初にローカルでエスケープされ、次にリモートエンドでエスケープされる場合があります。その場合、このように書くことができます:
"'complete argument'"
次のような二重引用符内の引用符内:
"'[email protected]:/C:/Users/user.name/test folder/'"
OR
スペースをエスケープし、次のように完全な引数を引用します。
'[email protected]:/C:/Users/user.name/test\ folder/'
OR
このようなエスケープシーケンスを使用して直接2回エスケープする
[email protected]:/C:/Users/user.name/test\\ folder/
詳細は自由に追加してください。
CentOSクライアントからWindows7(SP1)にscpするために上記のすべてのオプションを試しましたが、成功しませんでした。
これは私にとってもうまくいきました:
$ scp /tmp/lala 'win7@<IP>:"/Users/win7/Documents/TestComplete 14 Projects"'
"記号はbash自体によって解釈されます。bashは、可能であればインターブレート間のあらゆるものをカプセル化解除し、文字列として呼び出されるコマンドへの出力を提示するだけです。いくつかの特別な記号が含まれている可能性があります。アポストロフィ( ')記号を使用してみてください。bashは文字列をまったく見ないようにし、それを単にaに渡します。最初に呼び出されたコマンド。 'を含む文字列は、次のようにフォーマットする必要があります。
しないでください
echo $'dont\'t'