如何使用 ls/grep 的輸出作為 pdfunite 的輸入

如何使用 ls/grep 的輸出作為 pdfunite 的輸入

我想使用 pdfunite 將多個 pdf 檔案合併到一個輸出檔案中。由於目錄包含許多不同的內容,我想我可以使用 ls/grep 來取得適當的檔案名,然後使用 pdfunite 將其放在一起。 ls/grep 的輸出如下所示:

ls | grep "handout...pdf" 
handout01.pdf*
handout02.pdf*
handout03.pdf*
handout04.pdf*
handout05.pdf*
handout06.pdf*

然後我想調用 pdfunit,它具有以下語法:

 pdfunite [options] PDF-sourcefile1..PDF-sourcefilen PDF-destfile

我的問題是,我似乎無法將 ls/grep 的輸出透過管道傳輸到 pdfunite 中,因為它不應該像那樣工作。另一方面,如果我嘗試:

pdfunite ls | grep "handout...pdf" grep.pdf

然後 grep 顯然抱怨我選擇的輸出檔:

grep: grep.pdf: No such file or directory

我知道我可以執行兩個單獨的步驟,然後它就會起作用,但我想弄清楚如何用一行來完成此操作。

答案1

如果您的檔案模式那麼簡單,那麼您實際上不需要正規表示式,並且可以使用簡單的通配符:

pdfunite handout??.pdf

否則,您可以使用帶有命令和 -regex 的正規表示式find,但我找不到執行它的方法,該方法不可能分割成多個檔案組。您可能執行此操作的某些方法也取決於檔案名稱中沒有任何空格。

答案2

我相信,「勾號」字元可以用來做到這一點(蒂爾達上方的東西)。試試這樣的事情:

pdfunite [options] `ls | grep "handout...pdf"`

據我了解,這就是嵌套命令的方式。刻度線內的任何內容都會作為自己的命令執行,並且其輸出會取代刻度線。因此,上面的命令本質上等於

pdfunite [options] handout01.pdf* handout02.pdf* ...

答案3

您不一定需要 grep。您可以將模式傳遞給ls.

pdfunite $(ls handout*.pdf*) merged.pdf

相關內容