处理 img2pdf 和文件名中的空格时遇到问题

处理 img2pdf 和文件名中的空格时遇到问题

我正在尝试将一堆 jpeg 文件转换为 pdf 文件。

当我输入带引号的文件名时,一切都很好:

$ img2pdf "./Page 001.jpg" "./Page 002.jpg" -o book.pdf

当我使用通配符时,img2pdf 出现错误,提示它得到“./Page”而不是“./Page 001.jpg”:

IOError: [Errno 22] 无效模式 ('rb') 或文件名: '"./Page'

这是我使用的命令:

$ img2pdf `find . -name "Page*.jpg" -printf "\"%p\" "` -o book.pdf

可能会出现什么问题?

感谢您的帮助

答案1

我想你在 bash 中,所以...... bash 会将某些字符解释为分隔符。它取决于 $IFS(内部字段分隔符)环境变量的内容,该变量的默认值为空白(空格、制表符和换行符)。因此,当它在文件名中找到空格字符时,它将被解释为分隔符,并将文件名拆分为一个或多个部分(这取决于找到多少个空格、制表符或新行)。

解决方案可能是将 $IFS 值更改为符合您需求的值。例如,在您的情况下,只有换行符应被解释为分隔符:

# first save current value
OLD_IFS=$IFS

# change value to something you need
IFS="\n"

# do what you need to do here
#############################

# restore default value of IFS
IFS=$OLD_IFS

有关更多详细信息,请参阅此文档 IFS 参考

编辑:

我刚刚用 img2pdf 做了一些测试。我有 101 张图片,名称如下

名称_0.png、名称_1.png、名称_2.png、...、名称_100.png

为了将它们放入 test.pdf 文件中,我使用了这个命令 img2pdf -o test.pdf name_{0..100}.png

这没有任何问题。然后我对名称中带有空格的文件进行了另一个测试,例如:

名称 0.png、名称 1.png、名称 2.png、...、名称 100.png

命令是(空格字符通过反斜杠转义): img2pdf -o test.pdf name\ {0..100}.png

我希望这能帮到您。

相关内容