我试图提供一个文件名列表,其中包含pdftk的空格(将3个PDF合并为一个PDF),但它似乎不喜欢我正在尝试的内容。
# pdftk INPUT1.pdf INPUT2.pdf output OUTPUTFILE.pdf它可以手动指定文件:
$ pdftk "pdf 1.pdf" "pdf 2.pdf" output t.pdf
$ ls t.pdf
t.pdf (and it works/opens fine)但下列任何一项似乎都不起作用:
$ pdftk "$(ls --quoting-style=c | tr "\n" " ")" output t.pdf
Error: Unable to find file.
Error: Failed to open PDF file:
"pdf 1.pdf" "pdf 2.pdf" "pdf 3.pdf"
Errors encountered. No output created.
Done. Input errors, so no output created.(注意,在$(ls)周围不使用引号也会失败)
或者这个:
$ ls -1
'pdf 1.pdf'
'pdf 2.pdf'
'pdf 3.pdf'
$ pdftk "$(ls -1 | tr "\n" " ")" output t.pdf
Error: Unable to find file.
Error: Failed to open PDF file:
pdf 1.pdf pdf 2.pdf pdf 3.pdf
Errors encountered. No output created.
Done. Input errors, so no output created.发布于 2019-09-23 16:55:50
$ pdftk "$(some command)" output t.pdf这将运行一些命令,然后双引号将输出封装到一个"word“中。无论是什么命令,结果都是pdftk接收到一个包含命令输出的全部参数。
解析ls通常被认为是个坏主意。
正如@RavinderSingh13所建议的那样,仅仅指定*.pdf (甚至*)就可以解决您的问题。shell执行"globbing“来扩展通配符,并将它们正确地拆分为”word“本身:
$ pdftk * output t.pdf如果您运行的命令不是ls,而是输出了文件名列表,那么您需要谨慎一点,在正确的地方引用。
在xargs POSIX规范的“应用程序使用”一节中给出了一些可移植的方法(对命令输出有一些假设)。
使用GNU版本的实用程序的系统(例如。( find和xargs)使用非标准的-print0、-0和相关命令参数提供了一种更健壮的机制,这些参数假设空字符是用于分隔命令输出项的(唯一)特殊字符。
发布于 2019-09-23 16:43:41
考虑到您一次只想合并3个文件,您可以尝试如下所示,我已经在Ubuntu系统上测试了3个文件(在Ubuntu系统中,它也处理带有空格的文件名)。你可以试一次。
pdftk *.pdf output t.pdfhttps://stackoverflow.com/questions/58066581
复制相似问题