0

我正在尝试在非常大的图像路径上运行 ImageMagick identify 命令,在其中识别返回与模式匹配的文件的图像尺寸。我要匹配的模式是:

/jewelclub_[a-z0-9]{1,}_(small|medium|large|zoom)\.jpg/

当我尝试执行以下两个命令时,第一个成功,第二个失败,这似乎是我的 RegExp 有问题:

(1): identify -format "%f %w %h %b \n" 'jewelclub_*\.jpg'
(2): identify -format "%f %w %h %b \n" 'jewelclub_[a-z0-9]{1,}_(small|medium|large|zoom)\.jpg'

关于如何将命令 #2 中的 PCRE 语法更改为兼容的 RegEx 风格(BRE?ERE?)的任何建议?

在此先感谢您的帮助。

4

2 回答 2

2

你确定identify接受正则表达式作为文件参数吗?

这个解决方法怎么样,将您的正则表达式传递给find然后通过管道传递给xargs

find -E . -regex "./jewelclub_[a-z0-9]{1,}_(small|medium|large|zoom)\.jpg" |\
xargs identify -format "%f %w %h %b \n"
于 2012-05-06T15:28:36.260 回答
0

我不知道如何identify工作,但我可以确认您使用的正则表达式:

jewelclub_[a-z0-9]{1,}_(small|medium|large|zoom)\.jpg

使用正确的 ERE 语法。

要使其符合 BRE 标准,这很棘手,因为 BRE 不支持该(...|...|..)语法。如果您需要使用 BRE,我会仔细检查每个案例,identify然后结合结果:

jewelclub_[a-z0-9]\{1,\}_small\.jpg
jewelclub_[a-z0-9]\{1,\}_medium\.jpg
jewelclub_[a-z0-9]\{1,\}_large\.jpg
jewelclub_[a-z0-9]\{1,\}_zoom\.jpg

或者我会在 BRE 中让事情变得更简单:

jewelclub_[a-z0-9]\{1,\}_[smlz][[:alpha:]]\{3,5}\.jpg

请参阅POSIX RegEx 标准

于 2012-11-02T02:07:38.843 回答