如何修改Zsh脚本使转换后的PDF存入原嵌套文件夹?
解决Zsh批量转PDF到原文件所在目录的问题
问题根源
原脚本中--outdir "$source_dir"强制将所有转换后的PDF输出到指定的根目录;移除该参数后,LibreOffice默认会把PDF输出到脚本的运行目录,都无法满足"输出到原文件所在嵌套文件夹"的需求。
解决思路
针对每个待转换的文件,动态提取它的所在目录路径,将该路径作为--outdir的参数,就能让PDF生成在原文件的同目录下。
修改后的完整脚本
#!/bin/zsh source_dir="/source/folder/of/documents" input_file_types=(doc docx xls xlsx) output_file_type="PDF" echo "# Using source directory " "$source_dir" echo "# Converting "${input_file_types[*]}" to "$output_file_type"" # 遍历文件类型进行转换 for ext in "${input_file_types[@]}" do # 查找对应类型文件,处理含空格和换行的文件名 find "$source_dir" -name "*.$ext" -print0 | while IFS= read -r -d $'\0' in_file do echo "Processing…" echo ">> Input "$in_file"" # 获取当前文件所在目录 in_file_dir=$(dirname "$in_file") # 转换文件,输出到原文件所在目录 sudo /Applications/LibreOffice.app/Contents/MacOS/soffice --convert-to pdf:writer_pdf_Export --outdir "$in_file_dir" "$in_file" # 生成输出文件名,用于日志输出 out_file="${in_file%.*}.pdf" echo ">> Finished "$out_file"\n\n" done done echo "DONE CONVERTING FILES"
关键修改点
- 修复变量重名问题:将循环变量
input_file_types改为ext,避免和数组变量重名导致的潜在逻辑错误 - 动态获取文件目录:用
dirname "$in_file"提取当前处理文件的父目录路径,存入in_file_dir变量 - 修正输出目录参数:将
--outdir "$source_dir"替换为--outdir "$in_file_dir",让PDF输出到原文件所在目录 - 完善日志输出:补充生成
out_file变量,原脚本中该变量未定义,日志会显示空值
内容的提问来源于stack exchange,提问作者user2985384
相关产品推荐
相关产品推荐

