BusyBox シェルでスペースを含むファイルの名前を変更する

BusyBox シェルでスペースを含むファイルの名前を変更する

SSHを介してSynology Diskstationの一部のファイル名を変更しようとしています。使用可能なシェルは BusyBox 組み込みシェルです。

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

ソースまたはターゲットファイル名にスペース文字を使用しようとすると、移動コマンドで常に2つのエラーが発生します。空白文字をエスケープしたり、ファイル名を引用したりすることは効果がないようです。

ターゲットで空白文字を使用してファイル名を変更する例:

/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これがcallで終わる小さなスクリプトであることを示してください/bin/busybox mv $@

私の間違いはどこにありますか?

答え1

mv追加したように、コマンドはスクリプトの最後の行です。/bin/mv

/bin/busybox mv $@

行に引用符がありません$@

/bin/busybox mv "$@"

$@スクリプトに提供されたパラメーターのリストを表します。この変数への参照は特別な意味を持ちます。つまり、拡張されると、各引数が個別に参照されます。これは少なくともおよびに有効ですbashdashbusybox

これにより、mv引数に引用符で囲まれたスペースが含まれていてもコマンドが機能します。

関連情報