scp vom Remote-Linux zum lokalen Windows mit Leerzeichen im lokalen Pfad

scp vom Remote-Linux zum lokalen Windows mit Leerzeichen im lokalen Pfad

Um eine Datei von einem Linux-Terminal auf ein Windows-System zu übertragen, funktionieren die folgenden beiden Beispiele einwandfrei.

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"

Ich muss dies tun, wenn der lokale Ordner Leerzeichen hat und ich den Namen nicht ändern kann, sagen wir/C:/Users/user.name/test folder/

Alle der folgenden Schritte schlagen fehl und führen zur Meldungscp: 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'"

Wie bekomme ich das zum Laufen?

Antwort1

  • Versuchen Sie es mitquotes 'oderDouble quotes "rund um das komplette Argument.

    Wie von @dirkt in den Kommentaren vorgeschlagen, sollte es funktionieren, das vollständige Pfadargument für den SSH-Host in Anführungszeichen zu setzen. Dadurch sieht Ihr Befehl so aus:

    scp /home/user.name/file.html '[email protected]:/C:/Users/user.name/test folder/'
    
  • Verwendenescape sequence for spacedazwischen der Ordnername.

    \Sie können (Backslash mit Leerzeichen) verwenden , das ist die Escape-Sequenz für ein Leerzeichen. Dadurch sieht Ihr Befehl so aus:

    scp /home/user.name/file.html '[email protected]:/C:/Users/user.name/test\ folder/'
    

    Beachten Sie das \mit einem Leerzeichen dazwischen test& folderdas macht estest\ folder.

  • Es kann sein, dass Sieneed to escape twiceas Es wird zuerst lokal und dann am Remote-Ende maskiert. In diesem Fall können Sie wie folgt schreiben:

    1. "'complete argument'"in Anführungszeichen innerhalb von doppelten Anführungszeichen wie folgt:

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

      ODER

    2. Vermeiden Sie Leerzeichen und zitieren Sie das gesamte Argument wie folgt:

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

      ODER

    3. Entkommen Sie zweimal direkt mit einer Escape-Sequenz wie dieser

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

Fügen Sie gerne weitere Details hinzu.

Antwort2

Habe alle oben genannten Optionen ausprobiert, um per SCP vom CentOS-Client auf Windows 7 (SP1) zuzugreifen, jedoch ohne Erfolg.

Das hier hat bei mir allerdings funktioniert:

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

Antwort3

Ich weiß nicht, ob das noch relevant ist, aber eine Lösung (die in manchen Situationen nach hinten losgehen kann) ist die Verwendung von „?“ anstelle eines Leerzeichens:

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

Antwort4

Der"Symbol wird von Bash selbst interpretiert. Bash entkapselt alles zwischen Interbretes, wenn es kann, und präsentiert die Ausgabe für einen aufgerufenen Befehl einfach als Zeichenfolge, die einige Sonderzeichen enthalten kann. Versuchen Sie es mit dem Apostroph (') Symbol, denn es zwingt bash, den String überhaupt nicht zu betrachten und ihn einfach an einen Befehl weiterzuleiten, der zuerst aufgerufen wurde. Diese Strings mit'sollte wie folgt formatiert sein: Wenn Sie sehen möchten

nicht

echo $'dont\'t'

verwandte Informationen