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호출로 끝나는 작은 스크립트임을 밝혔습니다 /bin/busybox mv $@.

내 실수는 어디에 있습니까?

답변1

추가한 대로 명령은 다음 마지막 줄이 mv포함된 스크립트입니다 ./bin/mv

/bin/busybox mv $@

이 줄 주위에 따옴표가 없습니다 $@.

/bin/busybox mv "$@"

$@스크립트에 제공된 매개변수 목록을 나타냅니다. 이 변수를 인용하는 것은 확장 시 모든 매개변수가 별도로 인용된다는 특별한 의미를 갖습니다. 이는 적어도 bash, dash및 에도 유효합니다 busybox.

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

관련 정보