这是我之前在此处提出的问题的后续问题。我需要找到并记录jpeg
子目录中所有图像的路径,其分辨率高于特定数字(例如,宽度高于 800)。
好吧,有数百万张图像,我想知道为什么find
下面的过程如此缓慢。所以我需要优化 bash 脚本以使其更快:
find -type f -regex "^.*\.\(png\|jpg\|jpeg\)$" -exec identify -format "%d/%f, %w, %h\n" {} \; | awk -F ',' '$2 > 800 && $3 > 600'
但是有一个有趣的特性:我有 4 个主要目录(1 到 4),每个目录正好有 256 个子目录。这些子目录中的每一个都有大约 5000 个子子目录,每个子目录有大约 10 个图像。所以它看起来像major_dir/subdir/subsubdir/10.jpg
。有趣的特点是这些子子目录中的所有图像都具有相同的分辨率;所以我真的不需要处理所有这 10 张图像。如果其中一个的分辨率满足,那么我只需要记录一个路径(子目录路径)。有了这个,希望我能获得快 10 倍的速度。另外,.jpg
如果这也有帮助,我所有的图像都是如此。
如何在 bash 脚本中执行此操作?所以理想的输出应该是这样的(path, width_of_images_there, height)
/path/to/sub_dir1, 1600, 1200
/path/to/sub_dir2, 1600, 1200
/path/to/sub_dir3, 3200, 2400
/path/to/sub_dir4, 1000, 800
那个怎么样:
对每个
jpg
文件进行此测试,发现其路径是否与前一个文件的路径匹配,并且仅在不匹配的情况下运行identify
。awk
正如您已经知道的那样,输出通过管道传输,我刚刚/%f
从identify
命令中删除以摆脱不必要的文件名。