2017-03-02 75 views
0

使用此脚本来调整用户上传到FTP的一些扫描的pdf文件的大小。我需要的是减少pdf的大小,减少处理它们的时间(上传到s3等)。GS:制作递归脚本

脚本:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf 

所以我的问题是:我怎么能做出这种递归?我需要减少文件夹中的所有文件。如果这可以覆盖原始文件,那么是完美的。

在此先感谢。

+0

你不能简单地用Ghostscript的覆盖原文件。当然,您可以使用shell脚本,但我建议您在这样做之前仔细考虑。 Ghostscript正在执行的操作非常复杂,如果出现任何错误,您将覆盖原来的含义,您将失去一些东西。 – KenS

+0

@ KenS感谢您的评论。我做了上面说的答案,并且我用空的pdf文件覆盖了所有文件。所以现在我需要再次上传所有文件。任何想法我怎么能做到这一点? – jspasiuk

+0

我并不是Shell脚本专家,但我建议将新文件写入新目录将是最简单的选择。例如set -sOutputFile =。/ reduced/$ f或类似的东西。你最终得到空文件的原因是因为一旦GS启动它就会打开(用于写入)输出文件。既然这是输入文件,那么在GS读取内容之前,它会立即截断它。正如我所说的,你不能用GS来完成,我认为你也应该小心一个shell脚本,以防发生错误。 – KenS

回答

0

您的脚本不是脚本。它是一个命令行。

您可以编写一个shell脚本遍历文件夹中的所有* .pdf文件,然后为每个文件调用gs ...

事情是这样的:

#!/bin/bash 
for f in *.pdf 
do 
    gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=processed/$f $f 
done 
+0

Thnks for the answer!有没有什么办法可以在命令行运行这个,而不是使.bash? – jspasiuk

+0

复制粘贴此答案,并且我的所有文件都被空白pdf覆盖 – jspasiuk

+0

嗨!你可以用输出=/processed/$ f来改变你的例子吗?那么没有人会丢失数据?谢谢! – jspasiuk