我的目录中有 415 个 gif 文件,并尝试使用以下命令将它们制作为单个 pdf 文件:
convert /path/to/*.gif file.pdf
但这会导致整个系统挂起/冻结。换句话说,它使系统变得非常慢,我必须Ctrl+ c(终止)该进程(这也消耗一些时间来停止)。
我该如何面对这个问题?是否有更好/替代的机制(命令/程序/解决方法)来完成此任务?
注意:我正在使用 Trisquel GNU/Linux 7.0 LTS 开发简单的台式电脑(3+3 GHz P4 处理器和 1GB og RAM)。该convert
计划是以下组织的成员图像魔术师工具套件。
答案1
您可能使用了大量内存并导致交换。/usr/bin/time -v
在命令前面使用一个简单的测试,当对 5 个文件运行时,然后再次对 10 个文件运行时,将显示,Maximum resident set size
对于两倍数量的文件,该值大约是两倍。
因此,与其一次性完成所有这些操作,不如一次转换一个,或者一次转换十个,然后将这些 pdf 连接起来。这将需要更长的时间,但内存更少。
rm -f /tmp/file.pdf
for i in *.gif
do convert "$i" /tmp/a.pdf
if [ -s /tmp/file.pdf ]
then gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=/tmp/b.pdf /tmp/file.pdf /tmp/a.pdf
else mv /tmp/a.pdf /tmp/b.pdf
fi
mv /tmp/b.pdf /tmp/file.pdf
done
答案2
使用 cpulimit 和 ionice 以及 Nice:
nice -n19 ionice -c3 cpulimit -l 20 -- convert /path/to/*.gif file.pdf