【问题标题】:Changing all images in a directory and its sub-directories using a single ImageMagick command?使用单个 ImageMagick 命令更改目录及其子目录中的所有图像?
【发布时间】:2020-11-21 16:21:52
【问题描述】:
我有一个包含多级子目录的目录,其中包含我想使用 ImageMagick 更改的 .jpg 文件。
要更改单个文件,我会 convert image0.jpg -resize x1000 -quality 82 small_image0.jpg
但是,除了每个目录中的所有 jpg 文件,我怎么能做同样的事情呢?
即:
- 将
-resize x1000 -quality 82 应用于所有目录中的每个jpg。
- 每个输出文件都应与其输入文件位于同一目录中,但名称前应加上
small_。
【问题讨论】:
标签:
bash
image
image-processing
imagemagick
imagemagick-convert
【解决方案1】:
使用find 和bash。
#!/usr/bin/env bash
path=("$@")
while IFS= read -ru9 -d '' pic; do
dirname=$(dirname "$pic")
basename=$(basename "$pic")
printf 'Converting %s to %s\n' "$pic" "$dirname/small_$basename"
convert "$pic" -resize x1000 -quality 82 "$dirname/small_$basename" || exit
done 9< <(find "${path[@]}" -type f -name '*.jpg' -print0)
假设您将脚本命名为myscript,以图片的路径作为参数执行它。
./myscript /path/to/pictures
- 用正确的路径/目录更改
/path/to/pictures,或者添加更多的路径/目录,用空格分隔,例如./myscript path1 path2 anotherpath morepath
而不仅仅是一个目录。