如何使用ls / grep的输出作为pdfunite的输入


0

我想使用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

我知道我可以做两个单独的步骤,然后它会工作,但我想弄清楚如何用一行做到这一点。

Answers:


2

如果你的文件模式很简单,你真的不需要正则表达式,你可以使用一个简单的通配符:

pdfunite handout??.pdf

否则,您可以使用带有find命令和-regex 的正则表达式,但我找不到执行它的方法,因为它无法分割成多组文件。您可能采取的一些方法也取决于没有任何文件名中包含任何空格。


1

我相信,“tick”字符可以用来做那件事(tilda上面的东西)。尝试这样的事情:

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

根据我的理解,这就是你如何嵌套命令。刻度内的任何内容都作为自己的命令执行,它的输出取代了刻度。所以,上面的命令基本上等同于

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

真正。但是使用ls它真的很邪恶(虽然常见)。您无法保证ls的输出是一致的。它经常是别名。找到otoh是一致的。
Hennes 2015年

诚然。我想用他原来的尝试,但提供一个答案,所以我没有用find
拉塞尔乌尔

1
哦,这是OP的一个很好的答案。我只是想对所有其他最终会阅读此内容的人说明。
Hennes 2015年

0

你不一定需要一个grep。你可以将模式传递给ls

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


无法保证只执行一次
pdfunite

@ Random832抱歉,我误解了这个问题。是的,这将为每个pdf文件执行pdfunite。
rahul 2015年

@ Random832。我现在编辑了答案以适应这个问题。谢谢你指出来。
rahul 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.