寻求兼容空格文件名的更简洁lowriter批量转换DOCX命令
兼容含空格文件名的DOCX转PDF批量优化命令
需求是批量找出没有对应PDF文件的DOCX文档,调用lowriter --headless --convert-to pdf完成转换。原命令仅支持无空格文件名,以下是更简洁、且完全兼容含空格文件名的优化方案:
方案一:纯Bash循环(推荐,最简洁高效)
直接用Bash的通配符遍历所有DOCX文件,通过参数扩展替换后缀,检查对应PDF是否存在:
for docx in *.docx; do pdf="${docx%.docx}.pdf" if [ ! -f "$pdf" ]; then lowriter --headless --convert-to pdf "$docx" fi done
优势:
- 天然支持含空格的文件名:Bash通配符
*.docx会正确识别带空格的文件,不会像ls那样拆分文件名 - 零外部工具依赖:用Bash内置的参数扩展和文件检查,比原命令的
perl+sed组合更高效 - 逻辑清晰:每一步操作直观,容易理解和修改
方案二:find递归处理(适合需要遍历子目录的场景)
如果需要处理当前目录及子目录下的DOCX文件,可以用find结合Bash子命令:
find . -type f -name "*.docx" -exec bash -c ' pdf="${1%.docx}.pdf" [ ! -f "$pdf" ] && lowriter --headless --convert-to pdf "$1" ' _ {} \;
如果只需要处理当前目录,添加-maxdepth 1参数即可:
find . -maxdepth 1 -type f -name "*.docx" -exec bash -c ' pdf="${1%.docx}.pdf" [ ! -f "$pdf" ] && lowriter --headless --convert-to pdf "$1" ' _ {} \;
原命令的问题说明
原命令依赖ls *.docx输出做管道处理,当文件名含空格时,ls的输出会被Shell按空格拆分成多个独立条目,导致后续命令处理错误。而上面的两种方案都通过原生的文件遍历方式避免了这个问题。
内容的提问来源于stack exchange,提问作者Anrik
相关产品推荐
相关产品推荐

