Problem beim sicheren Kopieren (scp) von Dateinamen mit Leerzeichen

9

Ich versuche, Dateien mit Secure Copy (SCP) zu kopieren. Ich versuche, den folgenden Befehl auszuführen, erhalte jedoch eine Fehlermeldung aufgrund des Leerzeichens im absoluten Pfad des Speicherorts des Verzeichnisses.

scp -r -P 8484 [email protected]:/media/New Volume/lj /home/pratheep

Ich erhalte die folgende Fehlermeldung:

scp: /media/New: No such file or directory  
scp: Volume/lj: No such file or directory

Ich habe versucht, mit dem gleichen Befehl einen zusätzlichen Schrägstrich wie zu setzen

scp -r -P 8484 [email protected]:/media/New\ Volume/lj /home/pratheep

aber ich bekomme immer noch den gleichen Fehler.

Kann mir jemand sagen, wie ich das korrigieren soll?

pradeepchhetri
quelle

Antworten:

18

Sie sollten Ihren Dateinamen zweimal angeben, einen für die lokale Shell und einen für die Remote-Shell. Im einfachsten Fall können Sie einen der folgenden Schritte ausführen

scp -r -P 8484 [email protected]:"'/media/New Volume/lj'" /home/pratheep
scp -r -P 8484 [email protected]:'"/media/New Volume/lj"' /home/pratheep

oder mithilfe der Tab-Vervollständigung

scp -r -P 8484 [email protected]:/media/New\\\ Volume/lj /home/pratheep
Enzotib
quelle
3
Es ist hilfreich zu beachten , dass scpVerwendungen sshals Transport , das erklärt , warum es zwei Durchgänge von Shell Interpretation Geschehen ist.
Msw
1

scpund rsyncübergeben Sie entfernte Dateinamen an die entfernte Shell. Auf diese Weise können Sie Muster wie in übergeben

scp remotehost:'*.txt' .

Dies hat jedoch die schlimme Konsequenz, dass Sie zusätzliche Anführungszeichen benötigen, wenn Sie einen Remote-Dateinamen angeben.

Sie können die -sOption übergeben, rsyncum die Dateinamen vor der Erweiterung durch die Remote-Shell zu schützen. Dadurch wird jedoch die integrierte Platzhaltererweiterung von rsync aktiviert, sodass Sie immer noch ein Zitat erstellen müssen \[?*.

Eine Problemumgehung besteht darin, ein Archiv zu übertragen:

ssh -P 8484 [email protected] 'cd "/media/New Volume" && tar cf - lj' |
tar xf - -C /home/pratheep

Eine andere Methode besteht darin, das Remote-Dateisystem bereitzustellen und dann mit normalen Tools die Kopie durchzuführen.

mkdir mnt
sshfs -p 8484 [email protected]:/ mnt
cp -Rp 'mnt/media/New Volume/lj' /home/pratheep
fusermount -u mnt
rmdir mnt
Gilles 'SO - hör auf böse zu sein'
quelle