我需要以“ .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$'