$ 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 空格blank
或space
使用 U+0020 空格的任何字符(在当前工作目录中的非隐藏文件的名称中)。
U+00A0 更罕见,因此在包括 GNU 系统在内的几个系统上,它没有被分类为这样,因为它不被用作分隔符/定界符。