使用单个 ImageMagick 命令更改目录及其子目录中的所有图像?
Changing all images in a directory and its sub-directories using a single ImageMagick command?
我有一个包含多级子目录的目录,其中包含我想使用 ImageMagick 更改的 .jpg 文件。
要更改单个文件,我会 convert image0.jpg -resize x1000 -quality 82 small_image0.jpg
但是,除了使用单个命令对每个目录中的所有 jpg 文件之外,我该如何做呢?
即:
- 对所有目录中的每个 jpg 应用
-resize x1000 -quality 82
。
- 每个输出文件都应与其输入文件位于同一目录中,但在名称前加上
small_
。
有 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
更改为正确的 path/directory,或添加更多 path/directory 并用 space 分隔,例如./myscript path1 path2 anotherpath morepath
而不是只有一个目录。
我有一个包含多级子目录的目录,其中包含我想使用 ImageMagick 更改的 .jpg 文件。
要更改单个文件,我会 convert image0.jpg -resize x1000 -quality 82 small_image0.jpg
但是,除了使用单个命令对每个目录中的所有 jpg 文件之外,我该如何做呢?
即:
- 对所有目录中的每个 jpg 应用
-resize x1000 -quality 82
。 - 每个输出文件都应与其输入文件位于同一目录中,但在名称前加上
small_
。
有 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
更改为正确的 path/directory,或添加更多 path/directory 并用 space 分隔,例如./myscript path1 path2 anotherpath morepath
而不是只有一个目录。