这应该很适合你:
#!/bin/bash
find . \( -iname "*.jpg" -o -iname "*.png" -o -iname "*.gif" \) -print0 | \
while read -d $'\0' -r image; do
read w h < <(sips -g pixelWidth -g pixelHeight "$image" | \
awk '/Width:/{w=$2} /Height:/{h=$2} END{print w " " h}')
echo $image $w $h
done
样本输出
./start2.png 640 480
./step2.gif 1 3918
./step2.jpg 1 3918
./step3.gif 2551 1
./survey.gif 2651 4018
./t.jpg 1 463
./tiger.png 258 296
将以上内容保存在名为pics 的文件中,然后转到终端并键入以下内容以使其可执行:
chmod +x pics
然后,当你想运行它时,只需输入:
./pics
不过,就个人而言,我更喜欢 ImageMagick 而不是 SIPS,因为您可以在一行中执行类似的操作:
identify -format "%f: %wx%h\n" *.jpg *.gif *.png
样本输出:
7T6Dj.jpg: 1920x1080
a.jpg: 400x463
b.jpg: 400x463
back.jpg: 906x603
background.jpg: 906x603
如果您想在 Mac 上安装 ImageMagick,请使用 homebrew,这很容易。
更新答案
如果您只想输出每个图像大小一次,忽略第二个和后续尺寸相同的图像,您可以在末尾添加一些awk,如下所示:
#!/bin/bash
# Find all types of imagery GIF, JPG, PNG
find . \( -iname "*.jpg" -o -iname "*.png" -o -iname "*.gif" \) -print0 | \
while read -d $'\0' -r image; do
read w h < <(sips -g pixelWidth -g pixelHeight "$image" | \
awk '/Width:/{w=$2} /Height:/{h=$2} END{print w " " h}')
echo $image $w $h
done | awk '{w=$(NF-1); h=$(NF); if(!seen[w SUBSEP h]++)print $0}'