如何使用Shell脚本以递归方式递归列出文件夹中所有图像的尺寸?

时间:2014-11-04 11:38:49

标签: image shell recursion terminal dimensions

我认为标题应该清楚地解释我正在尝试做什么。我是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

有人可以帮忙吗? 三江源!

3 个答案:

答案 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 {} \;