438 Stimmen

Wie kann ich Leerzeichen im Pfad für den scp-Kopierbefehl in Linux umgehen?

Ich möchte eine Datei vom Remote-System auf das lokale System kopieren. Derzeit verwende ich das scp-Kommando im Linux-System. Einige meiner Ordner- oder Dateinamen enthalten Leerzeichen. Wenn ich versuche, diese Datei zu kopieren, wird die Fehlermeldung angezeigt: "Keine solche Datei oder Verzeichnis".

Ich habe Folgendes versucht:

scp ael5105@192.168.0.200:'/home/5105/test/gg/Untitled Folder/a/qy.jpg' /var/www/try/

Ich habe einige Referenzen online gefunden, aber ich verstehe sie nicht vollständig. Kann mir jemand dabei helfen?

Wie kann ich Leerzeichen in Dateinamen oder Verzeichnisnamen beim Kopieren umgehen...

14voto

Luke Davis Punkte 2280

Es war sehr schwierig, dies zum Laufen zu bringen, wenn eine Shell-Variable einen Dateinamen mit Leerzeichen enthält. Aus irgendeinem Grund funktioniert es nicht, wenn man:

file="foo bar/baz"
scp user@example.com:"'$file'"

wie in @Adrians Antwort verwendet.

Es stellt sich heraus, dass das Beste ist, eine Parametererweiterung zu verwenden, um den Leerzeichen voranzustellen, wie folgt:

file="foo bar/baz"
file=${file// /\\ }
scp user@example.com:"$file"

10voto

Entschuldigung, dass ich diese Linux-Frage verwende, um diesen Tipp für Powershell auf Windows 10 zu geben: Das Escapen des Leerzeichens mit Backslashes oder das Umschließen mit Anführungszeichen hat in diesem Fall nicht bei mir funktioniert. Nicht effizient, aber ich habe es stattdessen mit dem "?"-Zeichen gelöst:

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

9voto

Jayen Punkte 5149

scp ael5105@192.168.0.200:/home/5105/test/gg/Untitled?Folder/a/qy.jpg /var/www/try/

das ? führt auf dem Remote-Server eine Glob-Aktion aus und passt zu jedem Zeichen, einschließlich einem Leerzeichen

1voto

Yes But No Punkte 11

Ich bin neu in Linux und habe Kali xD benutzt, hier funktioniert mein System: Von Ihrem System zum Remote-Server, wenn Sie Ihre Datei mit einzelnen oder mehreren Leerzeichen übertragen möchten:

$ scp this\ is\ my\ file tryhackme@1.1.1.1:/home/tryhackme

Beachten Sie, dass die IP-Adresse nur ein Beispiel ist und das letzte, was ich eingebe, das Verzeichnis und das Dollarzeichen ist, das die Eingabeaufforderung angibt. Der Code beginnt mit scp.

Sie können auch angeben, welchen Namen Sie der Datei geben möchten, wenn sie übertragen wird, z.B. /home/tryhackme/file1 oder mit einzelnen oder mehreren Leerzeichen wie /home/tryhackme/"this\ is\ new\ file".

Vom Remote-Server zu Ihrem System, genauso wie oben mit einzelnen oder mehreren Leerzeichen:

$ scp tryhackme@1.1.1.1:/home/tryhackme/"remote\ server\ file" "this is mine now"

Beachten Sie, dass Sie nur den Backslash \\ für die Datei verwenden, die Sie kopieren möchten. Wie Sie sehen können, hat der Ausdruck "this is mine now" kein \\, weil dies der Name der Datei ist, die wir möchten, wenn sie auf unser System übertragen wird und nicht die Datei, die wir sichern möchten (scp). Entschuldigen Sie meine Erklärung, ich hoffe, dass jemand das versteht, ich hoffe, dass dies jemandem hilft, der eine andere Lösung benötigt.

0voto

Ramyani Punkte 933

Wenn der Datei- oder Ordnername Leerzeichen enthält, können Sie einfach einen Backslash '' vor dem Leerzeichen hinzufügen und dann den gesamten Pfad in einfache Anführungszeichen ('') setzen, dann sollte es funktionieren.

Beispiel:

Angenommen, der Ordnernahme lautet 'Testordner' und er befindet sich im Verzeichnis /home/ auf dem entfernten Rechner. Dann können Sie auf den Ordner zugreifen oder ihn mit dem folgenden scp-Befehl herunterladen.

scp -r @:'/home/Test\ Ordenr' .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X