2013-03-10 50 views
1

我写了这个简单的shell脚本来使用imagemagik转换jpgs。它工作正常,但我想包括PNG,GIF,JPEG等,而通过文件扩展名通过每个迭代的脚本脚本。我更喜欢这种循环查找的方法,这样我可以更好地报告每个处理过的项目,并允许使用更具可扩展性的脚本来为每个进程添加其他大小和转换。 (而不是简单的convert *命令)。imagemagik目录转换文件

有什么建议吗?

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 
+1

阅读'man file':字符串像'file -b --mime-type $ f |如果$ f是图像文件,sed's | \([^ /] * \)/.* | \ 1 |''将返回“image”。 – 2013-03-10 17:00:23

回答

1

对于“将问题分解为1”找到文件,2)决定如何处理文件以及3)处理文件,将它分解为多个部分,然后分别处理。 “如先前所建议。这允许采用更具可扩展性的方法来添加更多的处理。

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

此外,

  • 使用-iname '*.jpg'代替-name '*.jpg'这样做不区分大小写的搜索。
  • 在查找中使用更多-iname参数以查找所需的所有其他扩展。例如,

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

即,你会发现你在一个通所需的文件,而不是使用发现遍地找不同扩展名的文件。

1

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

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

process_image脚本,您可以再选择基于文件的 扩展名或文件类型什么事。该脚本可以调用其他脚本,具体取决于你想要根据图像类型,大小等进行的操作。

将问题分解为1)查找文件,2)决定如何处理文件以及3)处理文件。使它成为模块将把问题分解成可以单独处理的部分。