bash 循环中的错误文件名

Bad file names in bash loop

意图

我正在尝试遍历一个目录并将所有 9000 个左右的 pdf 文件转换为 png

for i in *.pdf; do
    pdftoppm -f 1 -l 2 -png $i ${i%.pdf*}
done

问题

循环仅适用于大约 500 个案例。当我对一些未转换的 pdf 文件手动调用 pdftopm 时,它起作用了。

例如,一个在循环中不起作用的文件是w7hnp - FOO BAR 8-18-12 NOT FINAL DOC.pdf。当我使用制表符完成手动调用 pdftoppm 时,文件名包含转义字符:w7hnp\ -\ FOO\ BAR\ 8-18-12\ NOT\ FINAL\ DOC.pdf 并且命令工作正常。

有没有办法确保正确转义空格?

我需要保留文件名以与数据库中的其他信息相匹配,因此除非我可以创建包含旧名称和新名称的字典,否则重命名将不起作用。

您应该像这样引用变量:"$i""${i%.pdf*}"