如何使用find递归转换JPG图像?

时间:2012-07-15 18:10:17

标签: bash recursion directory find

基本上我想做的是递归搜索工作目录,然后使用给定的路径来调整图像大小。例如,找到所有* .jpg文件,将其大小调整为300x300并重命名为whatever.jpg。

我应该按照$(find | grep *.jpg)的方式做一些事情来获取路径吗?当我这样做时,输出是没有用引号括起来的目录,这意味着我必须在它们有用之前插入它们,对吗?

2 个答案:

答案 0 :(得分:6)

我使用 mogrify find

让我们说,我需要嵌套文件夹/另一个/文件夹/ * .jpg内的所有内容都在 * .png

find . -name "*.jpg" -print0|xargs -I{} -0 mogrify -format png {}

&安培;&安培;稍作解释一下:

find . -name *.jpeg - 找到嵌套文件夹中的所有jpeg -print0 - 打印所需的文件名,无需令人讨厌的惊喜(例如:文件名空间分隔)
xargs -I {} -0 - 使用 mogrify

逐个处理文件

最后那些{} 只是查找结果的虚拟文件名。

答案 1 :(得分:1)

你可以在GNU find中使用这样的东西:

find . -iname \*jpg -exec /your/image/conversion/script.sh {} +

这在引用方面会更安全,并且会产生更少的进​​程。只要您的脚本可以处理参数列表的长度,此解决方案应该是最有效的选项。

如果您需要处理非常长的文件列表,您可能需要付出代价并产生更多进程。您可以修改find​​以单独处理每个文件。例如:

find . -iname \*jpg -exec /your/image/conversion/script.sh {} \;