0

我完全不确定为什么这不起作用。这里的其他帖子建议它应该这样做。我只想在 find 上使用正则表达式来查找与_ __orig.png_ __DIFF.png匹配的所有文件。这将找到第一个:

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

但这什么也没找到:

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

用正则表达式匹配两者的正确方法是什么?(是的,我知道我可以使用 - 或拥有更长且更难维护的命令......)

4

2 回答 2

1

您需要同时转义括号和管道,使用:

find . -type f -regex '.*_____\(orig\|DIFF\)\.png'
于 2012-08-19T18:41:50.727 回答
1

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

可移植的方法是使用两个 -name 运算符。

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
于 2012-08-19T19:27:27.100 回答