在子文件夹中包含需要限制尺寸的图像(最大宽度为720或最大高度为1100)。他们的文件名必须保留。开始于:
for img in *.jpg; do filename=${img%.*}; convert -resize 720x1100\> "$filename.jpg" "$filename.jpg"; done
在每个目录中都有效,但是有很多带有这些图像的子文件夹。尝试find . -iname "*.jpg" -exec cat {}
,但没有按预期创建列表。
这也没有用:
grep *.jpg | while read line ; do `for img in *.jpg; do filename=${img%.jpg}; convert -resize 720x1100\> "$filename.jpg" "$filename.jpg"`; done
这两个都没有:
find . -iname '*jpg' -print0 | while IFS= read -r -d $'\0' line; do convert -resize 720x1100\> $line; done
它给了我错误信息"转换:没有定义图像。"然后:
find . -iname '*.jpg' -print0 | xargs -0 -I{} convert -resize 720x1100\> {}
给了我同样的错误信息。
答案 0 :(得分:4)
看来你正在寻找这个:
find /path/to/dir -name '*.jpg' -exec mogrify -resize 720x1100\> {} \;
在您的示例中,您剥离了.jpg
扩展名,然后将其添加回来。根本不需要剥离,这简化了很多事情。
此外,convert filename filename
与mogrify filename
实际上相同。 mogrify
是ImageMagick的一部分,它对于原位修改文件,覆盖原始文件很有用。 convert
对于创建新文件非常有用,可以保留原文。
答案 1 :(得分:0)
由于所有子目录都是两个级别,因此发现这有效:
for img in **/*/*.jpg ; do filename=${img%.*}; convert -resize 720x1100\> "$filename.jpg" "$filename.jpg"; done
感谢@pjh让我入门。这也有效:
shopt -s globstar ; for img in */*/*.jpg ; do filename=${img%.*}; convert -resize 720x1100\> "$filename.jpg" "$filename.jpg"; done
但是我收到了错误消息" -bash:shopt:globstar:无效的shell选项名称"但所有大于指定的图像都经过保留文件名的大小调整。