BusyBox 셸에서 공백이 있는 파일 이름 바꾸기

BusyBox 셸에서 공백이 있는 파일 이름 바꾸기

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.dashbusybox

이렇게 하면 mv인수에 따옴표로 묶인 공백이 포함된 경우에도 명령이 작동합니다.

관련 정보