1

我编写了这个简单的 shell 脚本来使用 imagemagik 转换 jpg。它工作正常,但我想包括 png、gif、jpeg 等......同时通过脚本为每次查找迭代传递文件扩展名。我确实更喜欢这种循环查找的方法,这样我就可以更好地报告每个处理的项目,并允许一个更具可扩展性的脚本来为每个进程添加其他大小和转换。(而不是简单的转换 * 命令。)。

有什么建议么?

find cdn/ -name '*.jpg' -print |  sort | 
while read f; 
 do 
 b=$(basename $f .jpg)
 in="${b}.jpg"
 thumb="${b}_150x150.jpg" 
if [ -e $thumb ]; 
then 
 true  
else 
 convert -resize 150 $in $thumb   
fi

done
4

2 回答 2

1

使其更加模块化,调用第二个脚本来处理图像文件。

find /path -type f -print |
while read filename ; do
     sh /path/to/process_image $filename
done

然后,在process_image脚本中,您可以根据文件的扩展名或文件类型选择做什么。该脚本可以根据您想要根据图像类型、大小等执行的操作调用其他脚本。

将问题拆分为 1) 查找文件,2) 决定如何处理文件和 3) 处理文件。使其模块化会将问题分解为可以单独解决的部分。

于 2013-03-10T17:11:21.820 回答
1

+1 表示“将问题拆分为 1) 查找文件,2) 决定如何处理文件和 3) 处理文件。使其模块化会将问题拆分为可以单独解决的部分。如前所述。这允许一种更可扩展的方法来添加更多处理。

这样,您不需要通过扩展名传递文件。这就是您想要的,通过扩展名传递文件吗?你必须这样做吗?

还,

  • 使用-iname '*.jpg'代替-name '*.jpg'以便进行不区分大小写的搜索。
  • 在 find 上使用更多-iname参数来查找您想要的所有其他扩展。例如,

    find cdn/ \(-iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' -o -iname '*.gif' \) -print

即,您可以一次性找到所需的所有文件,而不是一遍又一遍地使用 find 来查找不同的扩展文件。

于 2013-03-10T22:49:50.633 回答