在 BusyBox shell 中重命名带有空格的文件

在 BusyBox shell 中重命名带有空格的文件

我正在尝试通过 SSH 重命名 Synology Diskstation 上的一些文件。可用的 shell 是 BusyBox 内置 shell:

BusyBox v1.16.1 (2013-04-16 20:13:10 CST) built-in shell (ash)

当我尝试在源文件名或目标文件名中使用空格字符时,移动命令总是会产生两个错误。转义空格字符或引用文件名似乎没有效果。

在目标中重命名带有空格字符的文件的示例:

/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

在源中使用空格字符重命名文件会产生类似的结果:

/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返回mv is /bin/mv。该file命令在我的机器上不可用。cat /bin/mv透露这是一个以调用结尾的小脚本/bin/busybox mv $@

我的错误在哪里?

答案1

正如您所添加的,该命令是最后一行的mv脚本:/bin/mv

/bin/busybox mv $@

该行缺少引号$@

/bin/busybox mv "$@"

$@表示提供给脚本的参数列表。引用此变量具有特殊含义,即扩展时,每个参数都将单独引用。这至少对于和 是有效的bashdashbusybox

这样,mv当参数包含带引号的空格时,该命令也应该起作用。

相关内容