2011-04-13 67 views
2

我正在运行一个脚本,用于调整文件夹及其子目录中所有图像的大小,如果这些尺寸是特定大小的。该脚本在获得约1,000-2,000张图像后挂在“转换”行上。 (它每次都会有不同的确切图像)。ImageMagick转换环挂起

#! /bin/bash 

for f in $(find . -wholename "./raw/*.jpg"); do 
    # fwidth, fheight, outputdir, filename variables defined... 

    if [ "$fwidth" -gt 1000 ] || [ "$fheight" -gt 1000 ]; then 
     convert -resize 60% -quality 92 -unsharp 0x0.5 $f ${outputdir}/${filename}; 
    else 
     cp $f ${outputdir}/${filename}; 
    fi 
done 
+1

应该找到一个'-type f'说明符来只查找文件,不确定在任何目录下转换会做什么? – 2011-04-13 14:26:57

+0

它已经设法通过多个目录,所以我认为它工作正常。 – user706177 2011-04-13 14:54:56

+0

遇到同样的问题。你有修复吗? – zaf 2012-12-23 21:14:23

回答

1

首先更详细地描述“悬挂”是指什么。它会停止执行吗? convert在一段时间内100%CPU使用率下工作吗?还有别的吗?

然后开始调试脚本。请添加一些调试输出,并尝试运行bash -x script.sh脚本,该脚本应输出实际运行的所有命令。

#! /bin/bash 

for f in $(find . -wholename "./raw/*.jpg"); do 
    echo "=========== processing file $f" 
    # fwidth, fheight, outputdir, filename variables defined... 

    if [ "$fwidth" -gt 1000 ] || [ "$fheight" -gt 1000 ]; then 
     convert -verbose -resize 60% -quality 92 -unsharp 0x0.5 $f ${outputdir}/${filename}; 
    else 
     cp -v $f ${outputdir}/${filename}; 
    fi 
done 
+1

谢谢。 CPU挂起时的CPU使用率保持在60%左右(脚本未运行时约为30%)。我的意思是说,在一个迭代过程中,'bash -x脚本'会在'convert-resize ...'中停留一个多小时(然后我终止脚本)。它并不总是相同的文件,它发生。另外,文件名中没有特殊字符。 – user706177 2011-04-13 14:57:29

+1

如果您稍后执行在命令行上从未成功的命令,它是否工作? – 2011-04-13 15:04:45

+1

好问题。 'convert-resize 60%-quality 92 -unsharp 0x0.5 ./raw/data/2/default_2_fk.jpg。/ edited/data/2/default_2_fk.jpg'是剧本最后挂上的那一行,它也挂了当我从命令行运行它时。据我所知,这幅图像没有什么特别之处。而且,当我更改目标文件夹时,即使脚本能够将其他图像保存到该目标文件夹,它也可以在命令行上运行。 – user706177 2011-04-13 16:00:45