使用 gs 合并 PDF 会生成 /undefinedfilename 错误

问题描述 投票:0回答:1

我有一个下载我想要合并的 PDF 的目录。合并的顺序应该是下载的顺序(即,首先下载要合并的第一个 PDF,其次下载要合并的第二个 PDF,依此类推)。

我曾经在 PDF 目录中执行以下终端命令来完成此任务:

gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=merged.pdf $(ls -t | tail -r)

这用于生成名为“merged.pdf”的合并 PDF。

最近我迁移到了一台新计算机(新旧计算机都是Mac,使用的是ZSH而不是BASH),我发现上述命令在新计算机上停止工作。它会生成以下错误:

$ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=merged.pdf $(ls -t | tail -r)
Error: /undefinedfilename in (The)
Operand stack:

Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push
Dictionary stack:
   --dict:764/1123(ro)(G)--   --dict:0/20(G)--   --dict:75/200(L)--
Current allocation mode is local
Last OS error: No such file or directory
GPL Ghostscript 10.00.0: Unrecoverable error, exit code 1

奇怪的是,如果我像这样明确指定要合并的 PDF,它就可以正常工作

gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=merged.pdf first.pdf second.pdf third.pdf

so

gs
显然工作正常。另外,我发现
ls -t | tail -r
会按下载顺序生成 PDF 文件名列表:

$ ls -t | tail -r
first.pdf
second.pdf
third.pdf

所以

ls -t | tail -r
也工作正常。

如何才能使

gs
ls -t | tail -r
结合再次发挥作用?希望有任何见解。

怎么可以

google-sheets pdf terminal zsh
1个回答
0
投票

您的

$(...)
似乎返回了几个单词,并用空格分隔(即类似
first.pdf second.pdf third.pdf
的内容)。它们作为单个参数传递给
gs
。因此
gs
正在搜索具有这个长名称的单个文件。

您可以通过打开

set -x
来查看到底发生了什么。这应该显示管道的精确输出。

但是,基本问题是您说您正在使用为 bash 编写的代码,并且现在正在运行 zsh。您需要使用 bash 执行 bash 代码,而不是使用 zsh。

© www.soinside.com 2019 - 2024. All rights reserved.