2017-03-02 80 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