我有一个文件夹,有大约300张图片,每个300像素,它们是艺术家的图像。在该文件夹中,我创建了另一个名为60的文件夹。
我希望将每个图像的大小调整为60x60像素,通过将-60追加到其名称来重命名该文件,并将其移动到/60文件夹中。
因此,假设我有一个名为bob-dylan.jpg的图像,我想要调整大小,然后将其重命名为bob-dylan-60.jpg,然后移动,使其位于/60/bob-dylan-60.jpg中。
我已经尝试通过自己编写一个shell脚本batch-resize.sh来做到这一点。我已经把脚本变成了可执行文件。脚本尝试使用ImageMagick。到目前为止我的情况是这样的。
批大小.
#! /bin/bash
for f in /mnt/c/Users/jwan/Pictures/bejebeje-artist-images/*; do
mogrify -path /mnt/c/Users/jwan/Pictures/bejebeje-artist-images/60 -resize 60x60 $f
done这将调整图像的大小,并将其移动到/60目录,但不会重命名文件。我真的很纠结于改名。
我确实在网上搜索过,我看到了一堆%符号,但没有解释。
如果有人能告诉我如何在我也要做的文件重命名的基础上进行构建,我会很感激,但也可以解释如何实现重命名。
发布于 2020-09-18 15:25:33
以bash scriptname /path/to/files的形式执行此操作:
#!/bin/bash
for f in "$1"/*.{jpg,png}; do
[ -f "$f" ] || continue
base=$(basename "$f")
convert -resize 60x60 "$f" "$1/60/${base%.*}-60.${base##*.}"
done如果需要,向大括号添加更多扩展。
convert接受一个输入文件$f,并将调整大小的结果放在$1/60目录中($1是参数)。
[ -f "$f" ] || continue跳过操作,以防f不是常规文件。您肯定不想调整目录的大小。basename从文件名中移除路径。例如,a/b/c.jpg变成c.jpg。${base##*.}从文件的basename中删除直到最后一个点的所有内容。因此,它得到了扩展。${base%.*}在扩展名之后删除所有内容。https://unix.stackexchange.com/questions/610063
复制相似问题