问题描述
/New XXXX_Condition-selected FINAL/677193 2018-06-08 Xxxx Event-Exchange_FINAL/Xxxxx Dome Yyyy Side/Xxxx_General016 #07-08.BMP
(Xxx...Yyyy
字符串是出于隐私原因)。当然格式不是固定的:文件夹层次结构的深度可以变化,但是空格、字母和符号如 _
、-
和 #
都可以出现,或者作为路径或文件名的一部分,或两者兼而有之。
我的目标是递归所有子文件夹,找到.BMP文件并将它们转换为JPG文件,没有.BMP.JPG之类的“双重”扩展名:换句话说,上面的文件名必须成为
/New XXXX_Condition-selected FINAL/677193 2018-06-08 Xxxx Event-Exchange_FINAL/Xxxxx Dome Yyyy Side/Xxxx_General016 #07-08.JPG
我可以使用 bash shell 工具或 Python。你能帮我吗?
PS 我不需要原始文件,所以它们可以被覆盖。当然,不覆盖它们的解决方案也很好 - 我只会跟进 find . -name "*.BMP" -type f -delete
命令。
解决方法
请你试试:
find . -type f -iname "*.BMP" -exec mogrify -format JPG '{}' +
命令mogrify
是ImageMagick
套件的工具,mogrify -format JPG file.BMP
等价于convert file.BMP file.JPG
。
您可以添加 convert
接受的相同选项,例如 -quality
。
mogrify
的好处是它可以一次对多个文件执行相同的转换,而无需指定输出(转换后的)文件名。
如果该命令发出警告:mogrify-im6.q16: length and filesize do not match
,则表示BMP头中存储的图像大小与图像数据块的实际大小不一致。
如果 JPG 文件生成正确,您可以忽略警告。否则,您将需要修复导致警告的 BMP 文件。
如果输入文件和输出文件有相同的扩展名(在这样的情况下)
如果 JPG 到 JPG 转换并调整大小),原始文件将被覆盖。
如果他们像这次一样有不同的扩展名,那么原始的 BMP 文件是
没有删除。您也可以使用 find
删除它们。