如何在macOS中使用rename命令移除目录名前的空白字符
问题
在MacOS中,我有一批目录名带有前导空白字符,例如目录名显示为???9-24_v_hMrgprx2(其中???实际是空白字符)。尝试用rename "s/\s*//g" *命令移除这些前导空白失败,正确的处理方法是什么?
更新:通过十六进制dump确认前导字符的编码为e3 80 80:
ls | hexdump -C 00000000 e3 80 80 39 2d 32 34 5f 76 5f 68 4d 72 67 70 72 |...9-24_v_hMrgpr| 00000010 78 32 0a |x2.| 00000013
解决方案
你的问题出在:\s在Perl正则(MacOS自带的rename是Perl版本)中仅匹配半角空白字符(空格、制表符、换行等),但你遇到的是全角空格(UTF-8编码为e3 80 80),\s无法匹配它,所以原命令无效。
有两种直接可行的修复方法:
- 直接匹配全角空格
直接在正则里输入全角空格,命令如下:
rename 's/^ *//' *
(注:命令中的空格是全角空格,可直接复制或切换输入法输入)
- 使用十六进制转义匹配
既然已经知道字符的UTF-8编码,可在Perl正则中用\x{e38080}精准匹配该全角空格,命令如下:
rename 's/^\x{e38080}*//' *
两种命令中的^表示只匹配字符串开头的目标字符,*表示匹配0或多个该字符,确保所有前导的全角空格都会被移除。
内容的提问来源于stack exchange,提问作者littleworth
相关产品推荐
相关产品推荐

