2014-11-04 47 views
0

我认为标题应该解释清楚我正在尝试做什么。我很新的shell脚本,并设法把一些代码在一起,但它是不正确的 - 我的电脑上的每个文件正在上市如何使用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

你什么错误?你不使用imageFile,这很好,因为对basename的调用是不必要的,而你在'done'之前缺少';'。否则,它在语法上看起来很好。 – 2014-11-04 11:47:20

+0

感谢您的快速回复William,我没有收到错误,我需要过滤掉非图像文件。将更新我的问题,对不起! – alidrongo 2014-11-04 11:54:12

回答

4

这应该很好地为你工作:

#!/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}' 
+0

嗨,这是伟大的,虽然我得到一个错误,看起来像一个错字:image_dimensions.sh:第5行:语法错误附近意想不到的标记'<' 此外 - 要清楚我正在运行脚本通过键入sh imagedimensions .sh/path/to/FolderOfImages – alidrongo 2014-11-04 14:00:29

+0

不,它是'bash'。保存在一个名为'pics'的文件中,然后在终端中输入'chmod + x pics'使其成为可执行文件,然后运行它:'。/ pics' – 2014-11-04 14:03:44

+0

很棒!非常感谢。还有一个问题 - 每次有一幅以前没有列出的尺寸图像时,我怎么可能只回声? – alidrongo 2014-11-04 14:12:40

0

我找不到sips所以根据上面的答案,这个一行代码适用于我:

$ identify -format "%f: %wx%h\n" *.jpg *.gif *.png | cut -d: -f2 | sort -u | sed 's/x/\t/g' 

这输出在当前目录中的filesizes的宽度,高度制表符分隔的列表(我想看看我有多少不同尺寸的图像在我的目录)

909 503 
924 503 

笔记

实施例输出,第一部分:

jobs8.png: 909x503 
jobs.png: 909x503 
lobstr.png: 924x503 

第二部分,切出的文件名:

909x503 
909x503 
924x503 

删除重复:

909x503 
924x503 

与漂亮的标签制作:

909 503 
924 503 
相关问题