要检查我的图像的文件扩展名是否正确,即我的 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 支持)?
在我的 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
所以在我看来后者更好。