【问题标题】:How to make a loop to compile groff documents into a specific folder如何制作循环将 groff 文档编译到特定文件夹中
【发布时间】:2020-10-03 16:13:14
【问题描述】:

我有几个 .ms 文档分散在不同的文件夹中,我想制作一个脚本来编译每个 .ms 文档并在特定文件夹中输出相应的 .pdf 文件。

文件夹结构如下:

/home/user/foo/folder1/file1.ms
/home/user/foo/folder2/file2.ms
/home/user/foo/folder3/file3.ms
...

这是我到目前为止所做的:

#!/bin/bash
folder="/home/user/foo/"
file=$(du -a "$folder" | grep ".ms" | cut -f2- | sort)

但是我不知道如何制作将输出的每一行转换为相应的 .pdf 文件的循环,例如:

/home/user/foo/bar/file1.pdf
/home/user/foo/bar/file2.pdf
/home/user/foo/bar/file3.pdf
...

我用来将.ms编译成.pdf的groff命令是:

groff -k -T pdf -ms file.ms > file.pdf

编辑

感谢@dash-o 的回答,我已将脚本更新为:

#!/bin/bash
input="/home/user/foo/"
output="/home/user/foo/bar"
find $input -name '*.ms' -execdir sh -c 'groff -k -T pdf -ms {} > $output$(basename {} .ms).pdf' \;

但是,这只会编译第一个文档,并且不会将其放在“输出”目录中,而是放在与 .ms 文件相同的目录中,我得到“1:语法错误:”)“意外”。

【问题讨论】:

    标签: bash shell scripting pdf-generation groff


    【解决方案1】:

    表面上,需要两个步骤:

    • 查找所有“.ms”文件(使用 find ...)
    • 将每个文件转换为 PDF(在查找时使用 -execdir)
    folder=...
    find $folder -name '*.ms' -execdir sh -c 'groff -k -t -pdf -ms {} > $(basename {} .ms).pdf' \;
    

    【讨论】:

      【解决方案2】:
      #!/bin/bash
      input="/home/matthieu/Documents/Philosophie/L1"
      output="/home/matthieu/Documents/Philosophie/L1/S1/Cours"
      find "$input" -name '*.ms' -execdir sh -c 'groff -k -T pdf -ms "$1" > "$2/${1%.ms}.pdf"' sh {} "$output" \;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多