我想扫描目录中的所有图像(在子文件夹中递归),并找到分辨率高于特定阈值的图像(例如,至少具有分辨率的图像,800x600
或者如果更容易,例如宽度高于1000
像素的图像)。然后我想将他们的地址记录在一个文本文件中,并附上他们的分辨率(或[width], [height]
更好的格式)。
所以log.txt
看起来像这样:
/home/users/myuser/test/image1.jpg, 1800, 1600
/home/users/myuser/test/image20.jpg, 2800, 2600
/home/users/myuser/test/image30.jpg, 1500, 1200
我怎样才能使用 bash 脚本来做到这一点?我必须扫描数百万张图像。
通过 bash 的递归 glob 和 ImageMagick 的
identify
命令:将此类输出保存到文件中,只需添加
> mylog.txt
到先前的命令,即从那里,您可以使用
awk
或perl
比较mylog.txt
列awk
这里,
用作列的分隔符,通常的结构awk
is ,如果省略/PATTERN/{COMMANDS}
则默认只打印;{COMMANDS}
在上面的特定示例中,如果模式$2 > 800 && $3 > 600
为真,即高于所需分辨率的图像,您会将其打印到屏幕上。并且可能跳过两者之间的日志步骤,将所有内容都管道化会更好一些:
如果遇到
arguments list too long
错误,通常find
命令是递归遍历目录树的更好方法。identify
可以通过 的标志调用,find
过滤-exec
仍然可以由 处理awk
:像往常一样,不要忘记添加
> log2.txt
以将所有内容保存到文件中。文件的完整路径可以通过以下两种方式之一进行处理。一,通过
%d/%f
在identify
命令的格式字符串中指定,或使用find
'-printf
选项。那是要么或者