Ich bin neu in Linux, ich möchte eine Datei vom Remote-System auf das lokale System kopieren ... jetzt verwende ich den Befehl scp im Linux-System. Ich habe einige Ordner oder Dateinamen mit Leerzeichen, wenn ich versuche, das 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 einige Referenzen online gesehen, aber ich verstehe sie nicht perfekt. Kann mir jemand dabei helfen?
Wie kann ich beim Kopieren Leerzeichen in Dateinamen oder Verzeichnisnamen umgehen ...
Antworten:
Grundsätzlich müssen Sie es zweimal maskieren, da es lokal und dann auf der Remote-Seite maskiert wird.
Es gibt einige Optionen, die Sie (in Bash) ausführen können:
quelle
scp [email protected]:'$(ls -t | head -1)' .
, beispielsweise die zuletzt erstellte Datei auf dem Serverscp [email protected]:'dir/*.{xml,pdf}' .
abzurufen oder alle XML- und PDF-Dateien aus einem Remote-Verzeichnis abzurufen. Im Allgemeinen ziehe ich dies der Bequemlichkeit von Dateien mit Leerzeichen vor. Dateien mit Leerzeichen sind immer ein Problem.funktioniert
funktioniert nicht
Der Grund dafür ist, dass die Zeichenfolge von der Shell interpretiert wird, bevor der Pfad an den Befehl scp übergeben wird. Wenn es also auf die Fernbedienung gelangt, sucht die Fernbedienung nach einer Zeichenfolge mit nicht entfalteten Anführungszeichen und schlägt fehl
Um dies in Aktion zu sehen, starten Sie eine Shell mit den Optionen -vx, dh
bash -vx
sie zeigt die interpolierte Version des Befehls an, während er ausgeführt wird.quelle
"
oder'
Sie können auch so etwas tun wie:
Die erste Anführungszeichen-Ebene wird von scp interpretiert, und die zweite Anführungszeichen-Ebene behält die Leerzeichen bei.
quelle
Verwenden Sie 3 Backslashes, um Leerzeichen in den Namen von Verzeichnissen zu maskieren:
scp user@host:/path/to/directory\\\ with\\\ spaces/file ~/Downloads
sollte
Downloads
dasfile
aus dem entfernten Remote-Verzeichnis in Ihr Verzeichnis kopierendirectory with spaces
.quelle
Ich hatte große Schwierigkeiten, dies für eine Shell-Variable zum Laufen zu bringen, die einen Dateinamen mit Leerzeichen enthält. Aus irgendeinem Grund mit
wie in @ Adrians Antwort scheint zu scheitern.
Es stellt sich heraus, dass am besten eine Parametererweiterung verwendet wird, um Backslashes wie folgt vor das Leerzeichen zu stellen .
quelle
file="${file//\ /\\\ }"
Es tut mir leid, dass Sie diese Linux-Frage verwendet haben, um diesen Tipp für Powershell unter Windows 10 zu verwenden: Das Leerzeichen, das mit Backslashes oder Anführungszeichen umgeht, hat in diesem Fall bei mir nicht funktioniert. Nicht effizient, aber ich habe es mit dem "?" char stattdessen:
Für die Datei "task.txt Jun-22.bkp" habe ich sie mit "task.txt? Jun-22.bkp" heruntergeladen.
quelle