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

Bash脚本遍历子目录执行pdfimages命令及文件获取问题

解决Bash遍历子目录处理PDF文件的问题

你的目录结构为每个子目录下存放一个同名PDF文件:

x (文件夹)
  x.pdf (文件)
y
  y.pdf
...

需要用pdfimages -j x.pdf x命令,将每个子目录中的PDF转换为同名带序号的图片文件(如x-001.jpg),但之前的脚本报错I/O Error: Couldn't open file '*.pdf': No such file or directory,问题出在脚本没有正确定位到子目录内的PDF文件,以下是两种可行的解决方法:

方法一:使用find命令(推荐)

通过find直接定位所有子目录中的PDF文件,再执行处理命令:

find . -type f -name "*.pdf" -exec sh -c '
  pdf_dir=$(dirname "$1")
  pdf_base=$(basename "$1" .pdf)
  cd "$pdf_dir" && pdfimages -j "$1" "$pdf_base"
' sh {} \;
  • find . -type f -name "*.pdf":查找当前目录下所有后缀为pdf的文件
  • 用sh -c包裹处理逻辑:先获取PDF所在目录和不带后缀的文件名,进入对应目录后执行pdfimages,确保生成的图片存放在PDF所在的子目录中

方法二:使用for循环遍历子目录

手动遍历每个子目录,进入目录后处理PDF文件:

单PDF子目录场景

如果每个子目录只有一个PDF文件,可使用:

for dir in */; do
  cd "$dir" || continue  # 进入子目录,失败则跳过
  pdf_file=$(ls *.pdf)
  base_name="${pdf_file%.pdf}"
  pdfimages -j "$pdf_file" "$base_name"
  cd ..  # 返回上级目录
done

多PDF子目录场景

如果子目录中可能存在多个PDF文件,调整为遍历每个PDF:

for dir in */; do
  cd "$dir" || continue
  for pdf_file in *.pdf; do
    [ -f "$pdf_file" ] || continue  # 避免无PDF时匹配到"*.pdf"字符串
    base_name="${pdf_file%.pdf}"
    pdfimages -j "$pdf_file" "$base_name"
  done
  cd ..
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 01:20:04