2014-09-21 41 views
0

我有幾個電子書文件夾,我想從每本書中提取第一頁。有超過兩百本書如此手動做這是一個很大的痛苦在後面,將是非常耗時。訪問所有子目錄並從每個pdf中提取第一頁

我有確實爲單個文件

pdftk TehInput.pdf cat 1 output cover_TehInput.pdf 

作業命令我如何包裝成訪問一切,分配名字像cover_wtv-original-name-is.pdf輸出一個腳本呢?所有輸出文件都可能處於腳本開始的目錄或原始文件附近的任何位置。

+0

有沒有理由不能循環'ls'? – shadowtalker 2014-09-21 13:07:28

+1

@ssdecontrol:[有一個很好的理由,是的](http://mywiki.wooledge.org/ParsingLs)。 – 2014-09-21 13:08:27

+0

@gniourf_gniourf當你編寫健壯的代碼來處理別人的文件時,這是真的,因爲你無法控制它,是的。但是我們都知道,解析'ls'輸出通常是一個一次性任務的最簡單的方法,它可以處理大量您知道原點的文件,以及您確定名稱中沒有任何換行符的位置。 – 2014-09-21 13:30:39

回答

0

find . -iname '*.pdf' -printf "%h %f\n" | sed -E 's|(.*) (.*)|echo pdftk \1/\2 cat 1 output \1/cover_\2|' | sh 

如果輸出是好的,去掉「回聲」。

1

你想使用find命令。喜歡的東西:

find . -iname '*.pdf' -exec pdftk '{}' cat 1 output '{}'.cover.pdf ';' 

這會找到從當前目錄(.)向下的所有PDF文件,並在其上執行

pdftk filename.pdf cat 1 output filename.pdf.cover.pdf 

。這是將傳遞給pdftk的整個路徑,因此您將最終將封面PDF與原始文件放在同一目錄中。如果使用沒有空格或換行符的文件名(你可以做一些事情來擺脫.pdf.cover.pdf擴展如果需要)。

+0

@Cyrus你不能把'cover_'放在''{}''前面,因爲'{}''匹配整個路徑,而不僅僅是基本名稱。您將以路徑前面的'cover_'結尾。這就是爲什麼我附加了一些東西。 – 2014-09-21 13:27:55

+0

不好意思,謝謝你的提示。 – Cyrus 2014-09-21 13:32:19

相關問題