我有大约100个子目录,每个目录下有大约1000个文件。 我想使用Image Magick
在BASH for Win10
(即LINUX脚本
)下将JPG
转换为PNG
。 我的脚本速度很慢,我能加快它吗?
find . -type f -name '*.jpg' -exec sh -c '
orgfile="$0"
newfile="$(echo "$0" | sed 's/.jpg/.png/')"
echo $orgfile $newfile
convert $orgfile -unsharp 0x5 $newfile
rm $orgfile
' {} \;
我喜欢循环处理过程,因为转换是一系列过程中的第一个,所以输入和输出名称可以被重复使用。然而它很慢,echo用于反馈(改为每个目录?)
在相关的帖子中提供了以下解决方案
# Runs these conversions serially
ls *.NEF | sed 's#.NEF##' | xargs -I^ convert ^.NEF ^.jpg
# Runs these conversions with 8 different processes
ls *.NEF | sed 's#.NEF##' | xargs -P8 -I^ convert ^.NEF ^.jpg
但是另一篇文章警告说,并行处理可能会减缓系统的速度。
/media/ramdisk/img$ time for f in *.bmp; do echo $f ${f%bmp}png; done | xargs -n 2 -P 2 convert -auto-level
我觉得我正在陷入高级BASH脚本和并行处理中,我对xargs一无所知。
顺便说一下,串行运行使用约25%的PC资源。
mogrify
看起来只运行一个进程,尽管我有多个核心。使用像parallel
这样的工具,肯定可以通过并行运行来加速mogrify
。 - BallpointBen