我认为标题应该清楚地解释我正在尝试做什么。我是shell脚本的新手,并设法将一些代码放在一起,但它根本不对 - 我的计算机上的每个文件都被列出
我还想要检查所有图像类型(至少是jpg,png和gif)
find "$1" -name ".jpg" | while read imagePath ; do
imageFile=$(basename "$imagePath")
dimensions=$(sips -g pixelHeight -g pixelWidth * )
echo "$videoFile: $dimensions" done
有人可以帮忙吗? 三江源!
答案 0 :(得分:5)
这应该很适合你:
#!/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}'
答案 1 :(得分:0)
我无法找到sips
所以基于上面的答案,这个单线程对我有用:
$ identify -format "%f: %wx%h\n" *.jpg *.gif *.png | cut -d: -f2 | sort -u | sed 's/x/\t/g'
这将输出当前目录中文件大小的宽度,高度制表符分隔列表(我试图查看我目录中有多少不同大小的图像)
909 503
924 503
备注强>
示例输出,第一部分:
jobs8.png: 909x503
jobs.png: 909x503
lobstr.png: 924x503
第二部分,删除文件名:
909x503
909x503
924x503
删除重复项:
909x503
924x503
使用标签制作漂亮的东西:
909 503
924 503
答案 2 :(得分:0)
如果已安装 ImageMagick ,则可以将其“ 识别”命令与“ 查找”结合使用。
以下oneliner将为您提供基础目录中所有jpg图像的递归列表:
find . -name "*.jpg" -exec identify {} \;