ローカルパスにスペースを含むリモート Linux からローカル Windows への scp

ローカルパスにスペースを含むリモート 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'"

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

答え1

  • 使ってみる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/'
    

    \間にスペースが入っていることに注意してくださいtestfoldertest\ folder

  • おそらくあなたはneed to escape twice最初にローカルでエスケープされ、次にリモート側でエスケープされます。その場合は、次のように記述できます。

    1. "'complete argument'"引用符で囲み、二重引用符で囲みます。次のようにします。

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

      または

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

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

      または

    3. 次のようにエスケープシーケンスを使用して直接2回エスケープします。

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

詳細はお気軽に追加してください。

答え2

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

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

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

答え3

これがまだ当てはまるかどうかはわかりませんが、1 つの解決策 (状況によっては逆効果になる可能性もあります) は、スペースの代わりに「?」を使用することです。

scp "user@ip:/home/user/file?with?spaces.txt" .

答え4

シンボルは bash 自身によって解釈されます。bash は可能な場合は interbretes 間のすべてをカプセル化解除し、呼び出されるコマンドに出力を、いくつかの特殊シンボルを含む可能性のある文字列として提示します。アポストロフィ (') シンボルを使用すると、bash は文字列をまったく参照せず、最初に呼び出されたコマンドに渡すだけです。'次のようにフォーマットする必要があります。

しない

echo $'dont\'t'

関連情報