【发布时间】:2017-03-26 00:18:28
【问题描述】:
在需要限制大小的子文件夹中包含图像(最大宽度 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\> {}
给我同样的错误信息。
【问题讨论】:
-
如果您使用的是 Bash 4,那么您可以轻松修改您第一次尝试处理目录树中所有 jpg 文件的尝试:
shopt -s globstar ; for img in **/*.jpg ; do ... ; done。 -
也在stackoverflow.com/questions/23311384/…的基础上尝试了
find . -type d -exec bash -c 'cd "$0" || exit; shopt -s nullglob; f=( *.jpg ); ((${#f[@]})) && echo convert -resize 640x1100\> "${f[@]}" "${f[@]}"' {} \; -
我升级了 Bash 并得到了转换:无法打开图像
'**/*.jpg':没有这样的文件或目录。 -
啊!我错过了一个子目录级别...这工作非常感谢!
标签: bash imagemagick imagemagick-convert subdirectory