Ich habe ein Bash-Skript, mit dem ich scp
eine 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 scp
Befehl 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