如何使用 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

我认为可以使用“tick”字符(波浪号上方的符号)来实现这一点。尝试以下操作:

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

据我所知,这就是嵌套命令的方式。刻度内的所有内容都会作为其自己的命令执行,并且其输出将替换刻度。因此,上面的命令基本上等同于

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

答案3

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

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

相关内容