![处理 img2pdf 和文件名中的空格时遇到问题](https://linux22.com/image/75947/%E5%A4%84%E7%90%86%20img2pdf%20%E5%92%8C%E6%96%87%E4%BB%B6%E5%90%8D%E4%B8%AD%E7%9A%84%E7%A9%BA%E6%A0%BC%E6%97%B6%E9%81%87%E5%88%B0%E9%97%AE%E9%A2%98.png)
我正在尝试将一堆 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
我希望这能帮到您。