Bash 以递归方式转换调整大小并保留文件名
Bash convert resize recursively preserving filenames
子文件夹中的图像需要限制大小(最大宽度 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 $'[=13=]' line; do convert -resize 720x1100\> $line; done
这给了我错误信息 "convert: no images defined." 然后:
find . -iname '*.jpg' -print0 | xargs -0 -I{} convert -resize 720x1100\> {}
给我同样的错误信息。
由于所有子目录都向下两级,因此发现此方法有效:
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 选项名称”,但所有大于指定的图像都已调整大小并保留文件名。
看来您正在寻找的只是这个:
find /path/to/dir -name '*.jpg' -exec mogrify -resize 720x1100\> {} \;
在您的示例中,您删除了 .jpg
扩展名,然后将其添加回去。根本不需要剥离,这大大简化了事情。
此外,convert filename filename
与 mogrify filename
实际上是一样的。 mogrify
是 ImageMagick 的一部分,它对于就地修改文件、覆盖原始文件很有用。 convert
对于创建新文件、保留原始文件很有用。
子文件夹中的图像需要限制大小(最大宽度 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 $'[=13=]' line; do convert -resize 720x1100\> $line; done
这给了我错误信息 "convert: no images defined." 然后:
find . -iname '*.jpg' -print0 | xargs -0 -I{} convert -resize 720x1100\> {}
给我同样的错误信息。
由于所有子目录都向下两级,因此发现此方法有效:
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 选项名称”,但所有大于指定的图像都已调整大小并保留文件名。
看来您正在寻找的只是这个:
find /path/to/dir -name '*.jpg' -exec mogrify -resize 720x1100\> {} \;
在您的示例中,您删除了 .jpg
扩展名,然后将其添加回去。根本不需要剥离,这大大简化了事情。
此外,convert filename filename
与 mogrify filename
实际上是一样的。 mogrify
是 ImageMagick 的一部分,它对于就地修改文件、覆盖原始文件很有用。 convert
对于创建新文件、保留原始文件很有用。