我正在尝试编写一个小型 bash 脚本,它将目录中的源文件转换为 .pdf。步骤是这些
- 使用 find 定位文件
- 通过 find -exec 将字符编码从 utf-8 转换为 iso-8859-1 对文件执行 iconv
- 通过 enscript 传递此输出并最终传递给 ps2pdf
我添加 iconv 的唯一原因是 enscript 不支持 utf-8。到目前为止,我已经造成了以下混乱:
#!/bin/bash
enscript --portrait --columns=1 --header ' $n|'"$2"'|%F Page $% of $=' --highlight='java' --line-numbers --output='-' --color --font='Courier8' `find $1 -name '*.java' -type f -exec iconv -f utf-8 -t iso-8859-1 {} +` | ps2pdf - "$2"'.pdf'
运行它会给出以下输出: enscript: invalid option -- ',' 尝试“enscript --help”以获取更多信息。
编辑:在我添加 -exec iconv 之前它没有给出该错误。
2.编辑:我现在看到的最初的表述很模糊。这是我尝试修改的原始脚本:
#!/bin/bash
`which enscript` --portrait --columns=1 --header ' $n|'"$2"'|%F Page $% of $=' --highlight='java' --line-numbers --output='-' --color --font='Courier8' `find $1'/src/' -name '*.java'` | ps2pdf - "$2"'.pdf'
./script.sh 目标目录 输出文件名
原始脚本将文件夹中的所有源文件递归地组合成一个 pdf 文件,每个文件从新页面开始。也许我只能忍受必须分两步完成这件事。首先转换字符集,然后转换为pdf。
答案1
创建 java2ps 脚本以简化参数处理
#!/bin/bash
export ENSCRIPT="
--portrait
--columns=1
--font=Courier8
--highlight=java
--color
--line-numbers
--output=-
"
iconv -f utf-8 -t iso-8859-1 "$1" \
| enscript --header=' $n|'"$1"'|%F Page $% of $='
现在,执行很简单
find -name '*.java' -type f -exec ~/java2ps {} \; | ps2pdf - > all.pdf