合并PDF的XARGS gs

时间:2013-06-24 12:32:14

标签: pdf merge terminal xargs

我尝试将多个pdf以“L”开头并以“.pdf”结尾在我的mac终端上。 我尝试了以下

find . -name "L*.pdf" | xargs -0  gs -q -dNOPAUSE -dBATCH -SDEVICE=pdfwrite -sOutputFile=patternmerged.pdf

我得到了以下输出

Error: /undefinedfilename in (./L01_Introduction.pdf\n./L02_Edges, Corners, Superpixels and Blobs.pdf\n./L03_SIFT, SURF, MSER.pdf\n./L04_Texture and Shape.pdf\n./L05_Feature Reduction.pdf\n./L06_Bag of Visual Words.pdf\n./L07_Clustering...)

Operand stack:
Execution stack:
%interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2        %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push

Dictionary stack:
--dict:1167/1684(ro)(G)--   --dict:0/20(G)--   --dict:77/200(L)--
Current allocation mode is local
Last OS error: No such file or directory
GPL Ghostscript 9.06: Unrecoverable error, exit code 1

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

当使用xargs的-0参数时,它期望输入参数(文件名)由空字符分隔,而不是由换行符分隔。

要使上面的示例正常工作,find可以与-print0选项一起使用:

find . -name "L*.pdf" -print0 | xargs -0 -t gs -q -dNOPAUSE -dBATCH -SDEVICE=pdfwrite -sOutputFile=patternmerged.pdf

或者tr可以预处理find命令的输出,用空字符替换换行符:

 find . -name "L*.pdf" | tr '\n' '\0' |xargs -0 -t  gs -q -dNOPAUSE -dBATCH -SDEVICE=pdfwrite -sOutputFile=patternmerged.pdf 

注: 使用-t参数,在执行之前打印xargs命令。