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
호출로 끝나는 작은 스크립트임을 밝혔습니다 /bin/busybox mv $@
.
내 실수는 어디에 있습니까?
답변1
추가한 대로 명령은 다음 마지막 줄이 mv
포함된 스크립트입니다 ./bin/mv
/bin/busybox mv $@
이 줄 주위에 따옴표가 없습니다 $@
.
/bin/busybox mv "$@"
$@
스크립트에 제공된 매개변수 목록을 나타냅니다. 이 변수를 인용하는 것은 확장 시 모든 매개변수가 별도로 인용된다는 특별한 의미를 갖습니다. 이는 적어도 bash
, dash
및 에도 유효합니다 busybox
.
이렇게 하면 mv
인수에 인용된 공백이 포함된 경우에도 명령이 작동합니다.