使用bash find和boolean match对正则表达式进行措辞

时间:2012-08-19 18:36:59

标签: regex bash

我不确定为什么这不起作用。这里的其他帖子表明它应该。我只想要一个正则表达式找到匹配 _ __ orig.png _ __ DIFF.png 的所有文件。这将找到第一个:

find . -type f -regex '.*_____orig\.png'

但这没有发现:

find . -type f -regex '.*_____(orig|DIFF)\.png'

将正则表达式与两者匹配的正确方法是什么? (是的,我知道我可以使用 - 或者更长时间,更难以维护的人员......)

2 个答案:

答案 0 :(得分:2)

你需要逃避父母和管道,使用:

find . -type f -regex '.*_____\(orig\|DIFF\)\.png'

答案 1 :(得分:2)

GNU find的-regex默认使用emacs flavor,我不是很熟悉。您可以更改与-regextype一起使用的正则表达式。使用-regextype posix-extended,您当前的-regex应该有效。

便携式方法是使用两个名字的运算符。

find . -type f \( -name "*_____orig.png" -o -name "*_____DIFF.png" \) -print

或者,使用bash 4.0或更新版本,您可以使用globstar和extglob代替find

shopt -s globstar extglob
for file in ./**/*_____@(orig|DIFF).png; do
    echo "$file"
done