$ 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으로 분류되지 않습니다.