UNIX“find”命令,匹配文字“点”

UNIX“find”命令,匹配文字“点”

我需要以“ .pdf”或“ .png”结尾的文件;这是我的尝试:

find /Users/robottinosino/Desktop/_PublishMe_ -type f -regex '.*[pdf|png]'

这错误地包括了以“Apdf”、“Zpdf”等结尾的文件(文件扩展名前缺少文字点)

我尝试将模式调整为:

find /Users/robottinosino/Desktop/_PublishMe_ -type f -regex '.*\.[pdf|png]'

但没有返回任何结果。使用反斜杠转义 . 不起作用。为什么?

[0] $ uname -a

Darwin Robottinosino.local 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun  7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386 i386

谢谢!

答案1

问题不在于点。而在于括号。方括号定义字符类;我相当确定您要做的就是对交替进行分组。为此,您需要圆括号。您需要为此使用扩展正则表达式,因此命令为:

find -E /Users/robottinosino/Desktop/_PublishMe_ -type f -regex '.*\.(pdf|png)'

-E标志是 BSDism(OS X 具有大量 BSD 式的用户空间)。在 GNU find 中,您改为将-regextype posix-extended作为一个表达式而不是标志(根据丹尼斯·威廉姆森的评论,这无疑是正确的)。

答案2

\( -name '*.pdf' -or -name '*.png' \)除非您有其他理由使用正则表达式进行匹配,否则您可以使用类似的方法。

答案3

模式[pdf|png]匹配任意方括号内的字符(包括管道符)。

尝试这个:

find /Users/robottinosino/Desktop/_PublishMe_ -type f -regex '.*\.\(pdf\|png\)'

答案4

您应该使用-name *.pdf而不是.*[pdf|png]
您的正则表达式将匹配等.Apdf.Zpng

您可以尝试以下操作:
find . -type f | egrep '.pdf$|.png$'

相关内容