shell - GhostScript 和文件名中的空格

标签 shell unix ghostscript

我在 GhostScript 接受文件名的 shell 脚本变量时遇到问题,如果这些文件名中有空格。

gs -dPDFX -dNOPAUSE -dBATCH -dNOOUTERSAVE -sDEVICE=pdfwrite -sOutputFile="${filename}" -sColorConversionStrategy=CMYK -dProcessColorModel=/DeviceCMYK -dCompatibilityLevel=1.4  "${f}" /usr/local/share/ghostscript/9.20/lib/PDFX_def.ps

如果文件名有空格,那么 GS 会说“没有这样的文件”,给出的名称为:

path/to/file/partial\

(注意最后的反斜杠。)

我也得到: 错误:/undefinedfilename in (/Users/Ben/Desktop/qwe\\qwe.pdf)

字面意义上的逃跑。我不敢相信这样一个受人尊敬的软件有如此重大的失败,尽管其他人似乎也有同样的问题,但没有任何重要的解决方案。我可以对我的脚本做些什么吗?

我使用的是 MacOS 10.11 和 12。 哦,“没有空格”不是解决方案。 ;-)

更新:即使是最简单的示例也会显示错误:

> f="/Users/Ben/Desktop/qwe\ qwe.pdf"
> gs "$f"
GPL Ghostscript 9.20 (2016-09-26)
Copyright (C) 2016 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Error: /undefinedfilename in (/Users/Ben/Desktop/qwe\\ qwe.pdf)

最佳答案

我想我已经修好了。似乎 GhostScript 没有正确处理转义字符,而是按字面解释它们。因此,您(我)需要通过从文件路径中删除所有反斜杠来清理输入。

 filename=${filename//\\}

再一次,非常奇怪,这么古老的软件竟然有这样的错误。

关于shell - GhostScript 和文件名中的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42578061/

相关文章:

linux - Sqlite:比较两个数据库并更新旧的 - Linux

pdf - pdf图像的ghostscript下采样,下采样因子错误

c - 使用 mktime() 查找两个日期之间的差异

java - iText PDF;如何使用 Java 将 jpeg2000 转换为 jpg

printing - 用于在 Ghostscript 中打印 PDF 的着色和混合分色

linux - 发现之间的区别。 –name *.txt 并找到 . –名称 "*.txt"

linux - 查找新文件夹的索引

java - 更改运行时 spring shell 中的提示符

c - &address + sizeof(type) 和 &address + 1 有什么区别?

linux消息其他用户的终端: change text color?