如何根据分辨率将图像分类到文件夹中?

如何根据分辨率将图像分类到文件夹中?

背景:我有一个文件夹,里面装满了保存的桌面图片。我想根据分辨率(1024x768 等)将它们放入文件夹中。即时创建文件夹是一种优势。目前,所有图片都在一个文件夹中,但其中一些在子文件夹中。如果这样更简单,我可以手动合并它们。

我更喜欢终端,尽管我还是个 Bash 新手。实际上,我根本不是一个程序员。

我正在使用 Mac OS X,但我并不反对安装额外的应用程序来实现这一点(MacPorts?),甚至使用其他操作系统(我现在在 VMWare 中安装了 Windows XP、Windows Vista 和 Ubuntu 9)。

答案1

我知道这是一个超过一年的话题(对此感到抱歉),但我认为有人可能需要完整的工作脚本,所以这里就有了。把这里的想法汇编成脚本,我们就得到了。

#!/bin/bash

for image in *.jpg;
    do res=$(identify -format %wx%h\\n $image);
    mkdir -p $res;
    mv $image $res;
done

答案2

真的,谢谢大家的回复!我又回来了,更有经验了,这里的大多数评论现在都更有意义了。

我稍微调整了@zatatlan 的脚本以适应文件名中的空格并添加更多文件扩展名。

#!/bin/bash

shopt -s nullglob # The script spits errors if this is not set and there are, say, no *.png files.
for image in *.jpg *.JPG *.jpeg *.JPEG *.gif *.GIF *.bmp *.BMP *.png *.PNG;
    do res=$(identify -format %wx%h\\n "$image");
    mkdir -p $res;
    mv "$image" $res;
done

答案3

可以使用图像魔法检测图像分辨率。将其包装在 bash 循环中即可。我不会等到回家后再使用 bash shell,所以这是我脑海中浮现的东西。语法可能不正确,但它可能会给你一些线索。

for image in $(`*.jpg`) do
   res=`identify $image | grep -o 'Resolution:'`
   if [ ! -d $res ]; then
     mkdir $res
   fi

   mv $image $res
done

该脚本可动态创建目录。bash 和 imagemagick 均适用于 Mac。

答案4

图像魔术师识别命令可以为您提供像素的宽度和高度,例如

~$ identify -format %w_%h\\n *jpg 
2868_3429
1056_960

您可以将其放入 bash 脚本中作为 for 循环的一部分,并且为了安全起见,将文件复制到与分辨率同名的目录中(检查它是否存在,如果不存在则创建)。

相关内容