
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 mit
quotes '
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/'
Verwenden
escape sequence for space
dazwischen 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 dazwischentest
&folder
das macht estest\ folder
.Es kann sein, dass Sie
need to escape twice
as Es wird zuerst lokal und dann am Remote-Ende maskiert. In diesem Fall können Sie wie folgt schreiben:"'complete argument'"
in Anführungszeichen innerhalb von doppelten Anführungszeichen wie folgt:"'[email protected]:/C:/Users/user.name/test folder/'"
ODER
Vermeiden Sie Leerzeichen und zitieren Sie das gesamte Argument wie folgt:
'[email protected]:/C:/Users/user.name/test\ folder/'
ODER
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'