这应该很好地为你工作:
#!/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}'
你什么错误?你不使用imageFile,这很好,因为对basename的调用是不必要的,而你在'done'之前缺少';'。否则,它在语法上看起来很好。 – 2014-11-04 11:47:20
感谢您的快速回复William,我没有收到错误,我需要过滤掉非图像文件。将更新我的问题,对不起! – alidrongo 2014-11-04 11:54:12