You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改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"

关键修改点

  1. 修复变量重名问题:将循环变量input_file_types改为ext,避免和数组变量重名导致的潜在逻辑错误
  2. 动态获取文件目录:用dirname "$in_file"提取当前处理文件的父目录路径,存入in_file_dir变量
  3. 修正输出目录参数:将--outdir "$source_dir"替换为--outdir "$in_file_dir",让PDF输出到原文件所在目录
  4. 完善日志输出:补充生成out_file变量,原脚本中该变量未定义,日志会显示空值

内容的提问来源于stack exchange,提问作者user2985384

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 08:46:21