Mac系统zsh环境下如何批量将PDF转为保留原文件名的EPS文件
Mac zsh环境下批量PDF转EPS实现方法
你当前使用的单文件Ghostscript转换命令可直接复用,配合zsh原生文件名处理语法写循环即可实现批量转换,不需要安装任何第三方工具。
单目录下批量转换(所有PDF都在当前文件夹)
直接在存放PDF文件的目录打开终端,执行以下命令:
for pdf_file in *.pdf; do gs -dNOCACHE -dNOPAUSE -dBATCH -dSAFER -sDEVICE=eps2write -dEPSCrop -sOutputFile="${pdf_file:r}.eps" "$pdf_file" done
- 这里的
${pdf_file:r}是zsh内置的文件名修饰语法,作用是自动去掉文件的.pdf后缀,拿到原始文件名,转换后的EPS文件会直接以原文件名.eps的格式保存在同目录下。 - 所有变量都加了双引号包裹,文件名带空格、中文、特殊符号都能正常处理,不会报错。
递归处理所有子目录内的PDF
如果你的PDF分布在当前目录的多层子文件夹里,先执行一次命令开启zsh扩展通配:
setopt extended_glob
然后执行递归转换的循环命令:
for pdf_file in **/*.pdf; do file_path="${pdf_file:h}" raw_name="${pdf_file:t:r}" gs -dNOCACHE -dNOPAUSE -dBATCH -dSAFER -sDEVICE=eps2write -dEPSCrop -sOutputFile="${file_path}/${raw_name}.eps" "$pdf_file" done
- 这个命令会遍历当前目录下所有子文件夹里的PDF文件,转换后的EPS会和原PDF保存在相同目录,不会打乱原有文件结构。
- 语法里的
:h用于取文件所在的目录路径,:t用于取不带路径的纯文件名,都是zsh原生支持的语法,不需要额外依赖。
预校验建议
如果不确定文件匹配是否正确,可以先把循环里的gs命令替换成打印语句,先预览待处理的文件对应关系:
for pdf_file in *.pdf; do echo "待转换:$pdf_file -> ${pdf_file:r}.eps" done
确认输出的文件名对应关系完全符合预期后,再替换回gs命令执行转换即可,避免误操作。
内容的提问来源于stack exchange,提问作者amrods
相关产品推荐
相关产品推荐

