我尝试将多个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
有人可以帮忙吗?
答案 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命令。