SSH를 통해 Synology Diskstation의 일부 파일 이름을 바꾸려고 합니다. 사용 가능한 셸은 BusyBox 내장 셸입니다.
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
이것이 call 로 끝나는 작은 스크립트라는 것을 보여주세요 /bin/busybox mv $@
.
내 실수는 어디에 있습니까?
답변1
mv
추가한 대로 명령은 스크립트 의 마지막 줄입니다 ./bin/mv
/bin/busybox mv $@
줄에 따옴표가 없습니다 $@
.
/bin/busybox mv "$@"
$@
스크립트에 제공된 매개변수 목록을 나타냅니다. 이 변수에 대한 참조는 특별한 의미를 갖습니다. 즉, 확장되면 각 인수가 개별적으로 참조됩니다. 이는 적어도 및 에 유효합니다 bash
.dash
busybox
이렇게 하면 mv
인수에 따옴표로 묶인 공백이 포함된 경우에도 명령이 작동합니다.