ImageMagick 与 Bash/Zsh:使用 *.(format1|format2) 与 "*.{format1,format2}"

问题描述 投票:0回答:1

要检查我的图像的文件扩展名是否正确,即我的 JPEG 是否真的是 JPEG、PNG 是否真的是 PNG、WebP 是否真的是 WebP,我可以使用以下 ImageMagick 命令:

magick identify -format "%f: %m\n" *.(jp*|png|webp)

或者我可以使用

"*.{jp*,png,webp}"
代替:

magick identify -format "%f: %m\n" "*.{jp*,png,webp}"

注意引号。否则,如果您的目标文件夹不包含每种格式的至少一个文件,则会出现错误。

magick identify -format "%f: %m\n" *.{jp*,png,webp}
zsh: no matches found: *.webp

ImageMagick 本身支持

*.(foo|bar|barz)
"*.{foo,bar,baz}"
语法,但是我的 macOS 上的 Zsh,以及我想 Linux 和 BSD 上的 Bash,仅支持第一个,带有括号
()

# works
file *.(jp*|png|webp)
# doesn't work at all. the {} syntax is not
# supported by Zsh and probably Bash
file *.{jp*,png,webp}

因此我的问题。在 ImageMagick 脚本中我们应该更喜欢哪种语法(例如,使用

magick identify
时):使用
()
(ImageMagick 和 Zsh/Bash 都支持),还是使用
{}
(仅 ImageMagick 支持)?

bash image-processing imagemagick zsh
1个回答
0
投票

在我的 M1 Mac OSX Ventura 上的 bash 中,我得到了

magick identify -format "%f: %m\n" *.(jp*|png|webp)

bash: syntax error near unexpected token `('

但是

magick identify -format "%f: %m\n" "*.{jp*,png,webp}"

barn.jpg: JPEG
image.png: PNG
lena.jpg: JPEG
lena.png: PNG
mandril3.jpg: JPEG
monet2.jpg: JPEG
redhat.jpg: JPEG
zelda1.jpg: JPEG

所以在我看来后者更好。

© www.soinside.com 2019 - 2024. All rights reserved.