Estoy intentando cambiar el nombre de algunos archivos en mi Synology Diskstation a través de SSH. El shell disponible es el shell integrado de BusyBox:
BusyBox v1.16.1 (2013-04-16 20:13:10 CST) built-in shell (ash)
El comando mover siempre produce dos errores cuando intento usar un carácter de espacio en el nombre del archivo de origen o de destino. Escapar de espacios o citar el nombre del archivo parece no tener ningún efecto.
Ejemplo para cambiar el nombre de un archivo con un carácter de espacio en el destino:
/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
Cambiar el nombre de un archivo con un carácter de espacio en la fuente produce resultados similares:
/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
devoluciones mv is /bin/mv
. El file
comando no está disponible en mi máquina. cat /bin/mv
Reveló que es un pequeño guión que termina con una llamada /bin/busybox mv $@
.
¿Dónde está mi error?
Respuesta1
Como agregó, el mv
comando es un script /bin/mv
con esta última línea:
/bin/busybox mv $@
A esta línea le faltan comillas alrededor de $@
:
/bin/busybox mv "$@"
$@
denota la lista de parámetros proporcionados al script. Citar esta variable tiene el significado especial de que, cuando se expanda, cada parámetro se citará por separado. Esto es válido al menos para bash
, dash
y también busybox
.
De esta manera, el mv
comando también debería funcionar cuando un argumento contiene espacios en blanco entre comillas.