Benennen Sie Dateien mit Leerzeichen in einer BusyBox-Shell um

Benennen Sie Dateien mit Leerzeichen in einer BusyBox-Shell um

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 mvgibt zurück mv is /bin/mv. Der fileBefehl ist auf meinem Computer nicht verfügbar. cat /bin/mvEs 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, mvhandelt es sich bei dem Befehl um ein Skript /bin/mvmit 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 bashund dashauch busybox.

Auf diese Weise mvsollte der Befehl auch funktionieren, wenn ein Argument in Anführungszeichen gesetzte Leerzeichen enthält.

verwandte Informationen