Unix `mv`를 사용하여 U+20 대신 유니코드 공백이 있는 파일 이름을 바꾸는 방법은 무엇입니까?

Unix `mv`를 사용하여 U+20 대신 유니코드 공백이 있는 파일 이름을 바꾸는 방법은 무엇입니까?
$ ls cn*
cn blah blah.txt
$ ls cn\ *
ls: cannot access 'cn *': No such file or directory
$ ls cn*|hexdump -C
00000000  63 6e e2 80 85 62 6c 61  68 c2 a0 62 6c 61 68 2e  |cn...blah..blah.|
00000010  74 78 74 0a                                       |txt.|
$ mv cn blah blah.txt 'cn blah blah.txt'
mv: 'cn blah blah.txt' and 'cn blah blah.txt' are the same file

참고: 0xe28085는 U+2005(FOUR-PER-EM SPACE)의 UTF-8 인코딩이고, 0xC2A0은 U+A0(NO-break SPACE)의 UTF-8 인코딩입니다. 첫 번째 매개변수를 복사하여 붙여넣 mv습니다 '. 파일 이름 주위에 s가 필요하지 않습니다.아니요파일 이름의 일반 공백(U+20).

일반 공백(예: U+20)을 사용하여 파일 이름을 입력할 수 있도록 파일 이름을 어떻게 바꾸나요?

답변1

그리고 zsh:

autoload zmv
zmv '*' $'${f//[\u2005\ua0]/ }'

U+2005는 일반적으로 blank또는 로 분류되므로 space다음과 같이 할 수도 있습니다.

zmv '*' '${f//[[:blank:]]/ }'

또는:

zmv '*' '${f//[[:space:]]/ }'

현재 작업 디렉터리에서 숨겨지지 않은 파일 이름에서 U+0020 공백으로 분류되거나 U+0020 공백을 사용하는 모든 문자를 바꿉니다 blank.space

U+00A0은 훨씬 더 드물기 때문에 GNU 시스템을 포함한 여러 시스템에서는 구분 기호/구분 기호로 사용되지 않기 때문에 U+00A0으로 분류되지 않습니다.

관련 정보