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