it-swarm.com.de

Wie entkomme ich Leerzeichen im Pfad während des Kopierens von scp in Linux?

Ich bin neu in Linux. Ich möchte eine Datei von einem entfernten auf ein lokales System kopieren. Jetzt verwende ich den Befehl scp im Linux-System. Ich habe einige Ordner oder Dateinamen mit Leerzeichen, wenn ich versuche, diese zu kopieren Datei, zeigt es die Fehlermeldung: "Keine solche Datei oder Verzeichnis"

Ich habe es versucht:

scp [email protected]:'/home/5105/test/gg/Untitled Folder/a/qy.jpg' /var/www/try/

Ich habe die Referenz online gesehen, aber ich verstehe sie nicht ganz. Kann mir jemand dabei helfen?

wie kann ich beim Kopieren Leerzeichen in Dateinamen oder Verzeichnisnamen umgehen?.

266
AlexPandiyan

Grundsätzlich müssen Sie es zweimal entkoppeln, da es lokal und dann auf der Remote-Seite entkoppelt wird.

Es gibt ein paar Optionen, die Sie tun können (in Bash):

scp [email protected]:"'web/tmp/Master File 18 10 13.xls'" .
scp [email protected]:"web/tmp/Master\ File\ 18\ 10\ 13.xls" .
scp [email protected]:web/tmp/Master\\\ File\\\ 18\\\ 10\\\ 13.xls .
427
Adrian Gunawan

funktioniert

scp localhost:"f/a\ b\ c" .

scp localhost:'f/a\ b\ c' .

funktioniert nicht

scp localhost:'f/a b c' .

Der Grund dafür ist, dass die Zeichenfolge von der Shell interpretiert wird, bevor der Pfad an den Befehl scp übergeben wird. Wenn die Fernbedienung ankommt, sucht sie nach einer Zeichenfolge mit Anführungszeichen und schlägt fehl

Um dies in Aktion zu sehen, starten Sie eine Shell mit den Optionen -vx, z. B. bash -vx und es wird die interpolierte Version des Befehls angezeigt, während er ausgeführt wird.

64
Vorsprung

Sie können auch Folgendes tun:

scp [email protected]:"\"apath/with spaces in it/\""

Die erste Ebene von Anführungszeichen wird von scp interpretiert, und die zweite Ebene von Anführungszeichen behält die Leerzeichen bei.

28
MattK

Verwenden Sie drei umgekehrte Schrägstriche, um Leerzeichen in Verzeichnisnamen zu maskieren:

scp [email protected]:/path/to/directory\\\ with\\\ spaces/file ~/Downloads

sollte das Downloads aus dem entfernten Verzeichnis mit dem Namen directory with spaces in Ihr file Verzeichnis kopieren.

6
Chris

Ich hatte große Schwierigkeiten, dies für eine Shell-Variable mit einem Dateinamen mit Leerzeichen zum Laufen zu bringen. Stellt sich heraus, dass mit

file="foo bar/baz"
scp [email protected]:"'$file'"

wie in @ Adrian scheint die Antwort zu scheitern (versuchen Sie es mit der Eingabe von set -x vor den obigen Befehlen, um zu sehen, wie die Shell diese Zeichenfolge interpretiert. es ist ziemlich wackelig und ich verstehe nicht wirklich, warum es fehlschlägt).

Es stellt sich heraus, dass eine Parametererweiterung auf m Backslashes vor dem Leerzeichen zu setzen am besten funktioniert.

file="foo bar/baz" # a file inside a directory-name with whitespace
file="${file//\ /\\\ }" # the `//` replaces all instances; `/` just replaces the first
scp [email protected]:"$file"
3
Luke Davis

Es tut mir leid, dass Sie diese Linux-Frage verwendet haben, um diesen Tipp für Powershell unter Windows 10 zu verwenden: Das mit Backslashes oder Anführungszeichen versehene Leerzeichen hat in diesem Fall bei mir nicht funktioniert. Nicht effizient, aber ich habe es mit dem "?" char stattdessen:

für die Datei "tasks.txt Jun-22.bkp" habe ich sie mit "tasks.txt? Jun-22.bkp" heruntergeladen

0
Vitor Pepicon