這應該很好地爲你工作:
#!/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