Warum meldet scp „Keine solche Datei“?

Warum meldet scp „Keine solche Datei“?

Ich habe ein Bash-Skript, mit dem ich scpeine Datei von meinem Computer auf einen anderen kopiere. Das Skript wird immer wieder beendet, nachdem ich das SSH-Passwort eingegeben habe, mit dem folgenden Fehler:

<filename>: No such file or directory

Dennoch überprüfe ich im Skript die Datei und sie ist in Ordnung. Das habe ich set -o verbose am Anfang getan und hier ist, was ich am Ende des Skripts bekomme:

scp /Volumes/FX4\ HDD/Users/matthewdavies/Downloads/NCIS.S11E01.HDTV.x264-LOL.mp4 [email protected]:"/media/3TB/TV\ Shows/NCIS"
[email protected]'s password:
/Volumes/FX4\ HDD/Users/matthewdavies/Downloads/NCIS.S11E01.HDTV.x264-LOL.mp4: No such file or directory

Also habe ich versucht, den scpBefehl wie ausgegeben auszuführen, und es war in Ordnung; er wurde kopiert. Was läuft schief???

Antwort1

Ich bin nicht ganz sicher, was Sie tun, aber wenn ich den Befehl aus Ihrem Beispiel einprobiere, erhalte ich Folgendes:

$ scp /home/saml/projects/Cooks.com\ -\ Recipe\ -\ Coconut\ Chicken.mht \
       root@remotey:"/root/some spaced out file.mht"
scp: ambiguous target

Dies liegt daran, dass Sie den Zielpfad in Anführungszeichen setzen und dieser auch Backslashs enthält, die die Leerzeichen maskieren. Wenn die aktuelle Shell jedoch die doppelten Anführungszeichen entfernt, entfernt sie auch den einzelnen Backslash, sodass der Zielpfad als bloße Zeichenfolge mit Leerzeichen übrig bleibt. Sie müssen einen der folgenden Schritte ausführen, um ihn weiter zu verschachteln, damit die Leerzeichen korrekt maskiert werden:

Beispiele

Methode Nr. 1 – doppelte Anführungszeichen, einfaches Anführungszeichen

$ scp /path/with\ spaces/file\ with\ spaces.txt \
       user@remotey:"'/home/user/some spaced out file.txt'"

Methode Nr. 2 – einfaches Anführungszeichen, doppeltes Anführungszeichen

$ scp /path/with\ spaces/file\ with\ spaces.txt \
       user@remotey:'"/home/user/some spaced out file.txt"'

Methode Nr. 3 - einfaches Anführungszeichen, Backslash

$ scp /path/with\ spaces/file\ with\ spaces.txt \
       user@remotey:'/home/user/some\ spaced\ out\ file.txt'

Methode Nr. 4 - Anführungszeichen, Backslash

$ scp /path/with\ spaces/file\ with\ spaces.txt \
       user@remotey:"/home/user/some\ spaced\ out\ file.txt"

Methode Nr. 5 - dreifache Backslashes

$ scp /path/with\ spaces/file\ with\ spaces.txt \
       user@remotey:/home/user/some\\\ spaced\\\ out\\\ file.txt

verwandte Informationen