使用find命令过滤RHEL 4中没有控制字符的文件名

时间:2013-08-01 09:45:42

标签: regex emacs find filenames

我正在尝试使用“find”命令选择没有奇怪字符的文件名(如CR,LN,DEL,...)。

以下命令行在 RHEL 5

中正常工作
find /dir -type f -regextype egrep -regex '^[[:print:]]+$'
find /dir -type f -regextype egrep -regex '^[^[:cntrl:]]+$'

但它不在 RHEL 4 中,因为regextype选项在find命令的4.1.20版本中不可用。

根据findutils包中的文档( /usr/share/info/find.info.gz ):

*Note Syntax of Regular Expressions: (emacs)Regexps, for a
*description of the syntax of regular expressions.

我很难理解Emacs正则表达式,因为在一个子目录中唯一的文件是

aaaa

以下命令行可以正常工作:

find . -type f -regex '\./[:alnum:]+'
find . -type f -regex '\./[:alpha:]+'

但这些其他的不是:

find . -type f -regex '\./[:print:]+'
find . -type f -regex '\./[^[:cntrl:]]+'

为什么接受某些角色类而不接受其他角色类? 你知道在RHEL 4中获得它的其他方法吗?

提前完成

1 个答案:

答案 0 :(得分:1)

尝试使用[\x20-\x7E]代替[:print:][\x00-\x1F\x7F]代替[:cntrl:]