我将原始图像保存在如下目录结构中:
./Alabama/1.jpg
./Alabama/2.jpg
./Alabama/3.jpg
./Alaska/1.jpg
...the rest of the states...
我想将所有原始图像转换为缩略图,以便可以在网站上显示它们。经过一番挖掘/实验后,我想出了以下 Linux 命令:
find . -type f -iname '*.jpg' | sed -e 's/\.jpg$//' | xargs -I Y convert Y.jpg -thumbnail x100\> Y-small.jpg
它以递归方式查找我的子目录中的所有 jpg 图像,从中删除文件类型(.jpg),以便我可以稍后重命名它们,然后将它们制作成缩略图并在文件类型前附加“-small”进行重命名。
它满足了我的目的,但它有点复杂,而且不太可靠。例如,我不确定如何在文件名开头插入“small-”(所以 ./Alabama/small-1.jpg)。
问题:
- 有没有更好、更强大的方法来从位于多个子目录中的图像创建缩略图?
- 我可以让现有的命令更加健壮吗(例如,但在保存之前使用 sed 重命名输出的缩略图 - 基本上修改 Y-small.jpg 部分)。
答案1
如果它始终只是您所在位置以下的一级目录,您可以尝试按以下方式循环:
for dir in *; do
[ ! -d "$dir" ] && continue; # skip non-directory entries, i.e. additional files
cd "$dir"
for file in *.jpg; do
convert -thumbnail x100 "$file" "small-${file}" # creates e.g. small-1.jpg
done
done