【问题标题】:Bash convert resize recursively preserving filenamesBash convert resize 递归地保留文件名
【发布时间】: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


【解决方案1】:

您似乎只是在寻找这个:

find /path/to/dir -name '*.jpg' -exec mogrify -resize 720x1100\> {} \;

在您的示例中,您剥离了 .jpg 扩展名,然后将其添加回来。根本不需要剥离,这大大简化了事情。 此外,convert filename filename 与mogrify filename 完全相同。 mogrify 是 ImageMagick 的一部分,它对于就地修改文件、覆盖原始文件很有用。 convert 可用于创建新文件、保留原始文件。

【讨论】:

  • 谢谢。我过去在 mogrify 上运气不好;因此,犹豫使用它。但这很好用,正是我所需要的。谢谢!
【解决方案2】:

由于所有的子目录都低了两层,发现这可行:

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: invalid shell option name”,但所有大于指定大小的图像都已调整大小并保留文件名。

【讨论】:

  • 然而,真正的问题是如何搜索所有级别的目录。
猜你喜欢
  • 2010-12-11
  • 1970-01-01
  • 2021-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-23
相关资源
最近更新 更多