1

我在一个目录结构中有原始图像,如下所示:

./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-”(so ./Alabama/small-1.jpg)。

问题:

  1. 有没有更好、更强大的方法从位于多个子目录中的图像创建缩略图?
  2. 我可以使现有命令更健壮吗(例如,但在保存sed之前使用重命名输出的缩略图 - 基本上修改 Y-small.jpg 部分)。
4

1 回答 1

3

无需构建如此复杂的结构。先制作小块,然后连接。

我决定不在文件名中间插入-small。它使一切变得更加复杂。最好使用前缀(更简单的代码,也更容易从拇指派生出原始文件名),它可以是 athumbsDir/或 a thumbsPrefix-.

#!/bin/sh

make_thumbnail() {
    pic=$1
    thumb=$(dirname "$1")/thumb-$(basename "$1")
    convert "$pic" -thumbnail x100 "$thumb"
}

# Now we need a way to call make_thumbnail on each file.
# The easiest robust way is to restrict on files at level 2, and glob those
# with */*.jpg
# (we could also glob levels 2 and 3 with two globs: */*.jpg */*/*.jpg)

for pic in */*.jpg
do
    make_thumbnail "$pic"
done
于 2012-07-02T19:41:53.710 回答