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

Ali*_*ing 0 shell terminal recursion image 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
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?谢谢!

Mar*_*ell 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
Run Code Online (Sandbox Code Playgroud)

样本输出

./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
Run Code Online (Sandbox Code Playgroud)

将上述内容保存在一个名为的文件中pics,然后转到终端并键入以下一次以使其可执行:

chmod +x pics
Run Code Online (Sandbox Code Playgroud)

然后,当您想要运行它时,只需键入:

./pics
Run Code Online (Sandbox Code Playgroud)

虽然,就个人而言,我更喜欢ImageMagick SIPS,因为你可以在一行中做类似的事情:

identify -format "%f: %wx%h\n" *.jpg *.gif *.png
Run Code Online (Sandbox Code Playgroud)

样本输出:

7T6Dj.jpg: 1920x1080
a.jpg: 400x463
b.jpg: 400x463
back.jpg: 906x603
background.jpg: 906x603
Run Code Online (Sandbox Code Playgroud)

如果你想在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}'
Run Code Online (Sandbox Code Playgroud)