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

使用pandoc批量转换epub/pdf等文件为txt时shell脚本执行异常问题

问题原因

你原有脚本的执行逻辑是将未修改的原始命令字符串输出后,再通过管道交给sed做替换修改,所以你直接把echo替换为eval时,eval执行的是还没做后缀修改的原始命令,自然达不到转换效果,相当于直接读写原文件。同时原有写法用ls遍历文件名、多轮sed修改字符串的方式,也容易在遇到带空格、特殊字符的文件名时出现解析错误。

解决方法

方法1:最小修改原有脚本

你原有脚本输出的命令本身是正确的,只需要在整个脚本的末尾加上管道交给bash执行即可,不需要修改内部的echo:

ls $1 | while read x; do echo "pandoc '$x' -o $x" | sed 's/\.[^.]*$//' | sed 's/$/.txt/' | sed 's/$/ --wrap=preserve/' ; done | bash

方法2:更稳健的改写方案

用shell内置的参数替换实现,不需要调用sed、也不需要解析ls输出,兼容性和效率更高:

#!/bin/bash
# 遍历指定目录下的文件,可自行修改通配符仅匹配指定格式,比如 "$1"/*.epub "$1"/*.pdf
for file in "$1"/*; do
  # 跳过目录,仅处理文件
  [ -f "$file" ] || continue
  # 内置参数替换去掉文件后缀
  filename_no_suffix="${file%.*}"
  # 执行转换
  pandoc "$file" -o "${filename_no_suffix}.txt" --wrap=preserve
done

注意:如果需要转换PDF文件,需要先安装poppler工具包:Debian/Ubuntu执行apt install poppler-utils,CentOS/RHEL执行yum install poppler-utils,否则pandoc无法解析PDF内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 07:36:04