web-dev-qa-db-ja.com

ローカルパスにスペースがあるリモートLinuxからローカルWindowsへのscp

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'"

これを機能させるにはどうすればよいですか?

2
Clay
  • 完全な引数の前後に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/'
    

    testfolderの間にスペースがある\に注意してください。これにより、test\ folderになります。

  • need to escape twice最初にローカルでエスケープされ、次にリモートエンドでエスケープされる場合があります。その場合、このように書くことができます:

    1. "'complete argument'"次のような二重引用符内の引用符内:

      "'[email protected]:/C:/Users/user.name/test folder/'"
      

      OR

    2. スペースをエスケープし、次のように完全な引数を引用します。

      '[email protected]:/C:/Users/user.name/test\ folder/'
      

      OR

    3. このようなエスケープシーケンスを使用して直接2回エスケープする

      [email protected]:/C:/Users/user.name/test\\ folder/
      

詳細は自由に追加してください。

2
C0deDaedalus

CentOSクライアントからWindows7(SP1)にscpするために上記のすべてのオプションを試しましたが、成功しませんでした。

これは私にとってもうまくいきました:

$ scp /tmp/lala 'win7@<IP>:"/Users/win7/Documents/TestComplete 14 Projects"'
0
Samuel

"記号はbash自体によって解釈されます。bashは、可能であればインターブレート間のあらゆるものをカプセル化解除し、文字列として呼び出されるコマンドへの出力を提示するだけです。いくつかの特別な記号が含まれている可能性があります。アポストロフィ( ')記号を使用してみてください。bashは文字列をまったく見ないようにし、それを単にaに渡します。最初に呼び出されたコマンド。 'を含む文字列は、次のようにフォーマットする必要があります。

しないでください

echo $'dont\'t'
0
someoneelse