我有包含數千個 PDF 的目錄(和子目錄),並且試圖將所有這些 PDF 中的總頁數匯總在一起。所以我嘗試運行這個命令:
find . -name \*.pdf -exec pdfinfo {} \; | grep Pages > filelist
我得到了透過管道傳輸到文件中的每個文件的頁數filelist
。
我真的很想透過管道輸入文件名,但不知道如何做到這一點(pdfinfo
返回大量有關 PDF 的數據,但不返回文件名本身)。
答案1
前面-exec
加上-print
.這樣,路徑名將find
在相應的pdfinfo
列印輸出之前被列印。-print
是預設操作(例如,當您執行 single 時find .
),但 的存在-exec
會抑制預設操作。
如果您喜歡各自輸出後的路徑名,pdfinfo
那麼您可以嘗試-exec … -print
,但請注意,在這種情況下,當且僅當(即)成功-print
時才會執行。一般來說,使用when作為測試。在您的問題中,我個人更喜歡首先使用路徑名,因此.-exec
pdfinfo
-exec … -print
-exec
-print -exec …
然後你需要調整你的grep
.使用 考慮的每個路徑名都find .
必須以 開頭的事實.
。grep -E '^(\.|Pages)'
匹配開頭有文字點或Pages
開頭有字串的行。
最終命令將是:
find . -name \*.pdf -print -exec pdfinfo {} \; | grep -E '^(\.|Pages)'
(自行重定向輸出)。
考慮-type f
作為第一個測試,以防出現一些非常規情況文件-name \*.pdf
偶然匹配。這將避免調用pdfinfo
目錄等。