2011-04-14 64 views
1

我有10個PDF要求輸入用戶密碼才能打開。我知道密碼。我想保留它們的解密格式。他們的文件名格式如下: static_part.dynamic_part_like_date.pdf使用pdftk一次解密許多PDF

我想轉換所有10個文件。我可以在靜態部分之後給出一個*並在其中工作,但我也想要相應的輸出文件名。所以必須有一種方法來捕獲文件名的動態部分,然後在輸出文件名中使用它。

這樣一個文件的正常方式是:

PDFTK secured.pdf input_pw foopass輸出unsecured.pdf

我想要做的事,如:

PDFTK VAR =擔保*。 pdf input_pw foopass output unsecured + var.pdf

謝謝。

回答

3

您的要求有點含糊,但這裏有一些想法可能會對您有所幫助。

假設1的10個文件是

# static_part.dynamic_part_like_date.pdf 
    # SalesReport.20110416.pdf (YYYYMMDD) 

而你只想要SalesReport.pdf轉化爲無擔保,你可以使用一個shell腳本來實現你的要求:

# make a file with the following contents, 
# then make it executable with `chmod 755 pdfFixer.sh` 
# the .../bin/bash has to be the first line the file. 

$ cat pdfFixer.sh 

#!/bin/bash 

# call the script like $ pdfFixer.sh staticPart.*.pdf 
# (not '$' char in your command, that is the cmd-line prompt in this example, 
# yours may look different) 

# use a variable to hold the password you want to use 
pw=foopass 

for file in ${@} ; do 

    # %%.* strips off everything after the first '.' char 
    unsecuredName=${file%%.*}.pdf 

    #your example : pdftk secured.pdf input_pw foopass output unsecured.pdf 
    #converts to 
    pdftk ${file} input_pw ${foopass} output ${unsecuredName}.pdf 
done 

您可能發現你需要修改%.*東西到

  • 從最後剝離(使用%。*)到剝下最後一個'。'和後面的所有字符(右起)。
  • 從最前面(使用#*。)到僅留下靜態部分,從前面留下動態部分(使用## *。)剝離所有內容,直到最後一個「。」。焦炭。

你真的會更容易找出你需要在cmd行。 設置有1個樣本文件名

myTestFileName=staticPart.dynamicPart.pdf 

一個變量,然後使用回聲與可變改性劑組合以查看結果。

echo ${myTestFileName##*.} 
echo ${myTestFileName#*.} 
echo ${myTestFileName##.*} 
echo ${myTestFileName#.*} 
echo ${myTestFileName%%.*} 

還要注意我如何IHTH

+0

我很抱歉,我沒有試過結合修改變量值與一個普通的字符串(.PDF),在unsecuredName=${file%%.*}.pdf

你的解決方案另外我想要一行命令而不是shell腳本。感謝您的努力和答案。 – sgarg 2012-07-18 15:46:43