使用`find`命令查找带有CJK字符的文件的正则表达式是什么?

时间:2014-07-18 13:41:21

标签: regex ubuntu terminal find cjk

我正在寻找的文件格式为cmn-我.flac,其中CJK字符是可变的。

使用find命令,我应该使用什么正则表达式查找名称中包含单个CJK字符的所有文件?


提示: 以下正则表达式找到所有文件,包括那些有和没有 CJK字符的文件:

find ./ -regex '.*\..*'  # ex: cmn-我.flac

然后:

find ./ -regex "cmn-.*[\x4e00-\x9fa5]*\.flac"   # the `-` breaks => fails 
find ./ -regex ".*[\x4e00-\x9fa5]*\.flac"       # finds with n CJK characters => we get closer!
find ./ -regex ".*[\x4e00-\x9fa5]{1}\.flac"     # the `{1}` breaks => fails. 
find ./ -regex ".*[\x4e00-\x9fa5]?\.flac"       # the `?` breaks => fails. 

如何使其有效?

2 个答案:

答案 0 :(得分:1)

我认为你的方法正确,需要在find man page(例如-regextype)看一下。

无法重现

find ./ -regex "cmn-.*[\x4e00-\x9fa5]*\.xml"
# find: Invalid range end

find的版本

首先,请务必检查您使用的find版本,实施之间存在一些差异:

find --version

提供:

find (GNU findutils) 4.4.2
…

说明

查看-regex-type选项,我只看到POSIX正则表达式类型:emacs(默认),posix-awkposix-basicposix-egrepposix-extended)。

doesn't support custom hex range definition (将 Perl POSIX 进行比较)。

答案 1 :(得分:0)

  1. 正则表达式中存在错误,在CJK匹配部分之外。要匹配的文件格式为

    cmn-我.flac

    相当

    ./cmn-我.flac

  2. 以下命令完全有效,匹配./cmn-*.flac *是任何单个字符,包括CJK

    find ./ -regex "./cmn-.\.flac"

  3. 以下内容完全有效,匹配./cmn-*.flac,其中*是任何单个 CJK字符

    <<还没找到!欢迎帮助! >>