Ich versuche, einige Dateien auf meiner Synology Diskstation über SSH umzubenennen. Die verfügbare Shell ist die in BusyBox integrierte Shell:
BusyBox v1.16.1 (2013-04-16 20:13:10 CST) built-in shell (ash)
Der Move-Befehl erzeugt immer zwei Fehler, wenn ich versuche, ein Leerzeichen entweder im Quell- oder im Zieldateinamen zu verwenden. Das Escapen von Leerzeichen oder das Setzen des Dateinamens in Anführungszeichen scheint keine Wirkung zu haben.
Beispiel für das Umbenennen einer Datei mit einem Leerzeichen im Ziel:
/volumeUSB1/usbshare/directory $ touch test
/volumeUSB1/usbshare/directory $ ls
test
/volumeUSB1/usbshare/directory $ mv test 'te st'
mv: can't rename 'test': No such file or directory
mv: can't rename 'te': No such file or directory
/volumeUSB1/usbshare/directory $ mv test te\ st
mv: can't rename 'test': No such file or directory
mv: can't rename 'te': No such file or directory
Das Umbenennen einer Datei mit einem Leerzeichen in der Quelle führt zu ähnlichen Ergebnissen:
/volumeUSB1/usbshare/directory $ touch 'te st'
/volumeUSB1/usbshare/directory $ ls
te st
/volumeUSB1/usbshare/directory $ mv 'te st' test
mv: can't rename 'te': No such file or directory
mv: can't rename 'st': No such file or directory
/volumeUSB1/usbshare/directory $ mv te\ st test
mv: can't rename 'te': No such file or directory
mv: can't rename 'st': No such file or directory
type mv
gibt zurück mv is /bin/mv
. Der file
Befehl ist auf meinem Computer nicht verfügbar. cat /bin/mv
Es hat sich herausgestellt, dass es sich um ein kleines Skript handelt, das mit dem Aufruf von endet /bin/busybox mv $@
.
Wo ist mein Fehler?
Antwort1
Wie Sie hinzugefügt haben, mv
handelt es sich bei dem Befehl um ein Skript /bin/mv
mit der folgenden letzten Zeile:
/bin/busybox mv $@
In dieser Zeile fehlen Anführungszeichen $@
:
/bin/busybox mv "$@"
$@
bezeichnet die Liste der Parameter, die dem Skript übergeben werden. Das Anführen dieser Variable hat die besondere Bedeutung, dass bei der Erweiterung jeder Parameter einzeln in Anführungszeichen gesetzt wird. Dies gilt mindestens für bash
und dash
auch busybox
.
Auf diese Weise mv
sollte der Befehl auch funktionieren, wenn ein Argument in Anführungszeichen gesetzte Leerzeichen enthält.