我有几个.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:语法错误:"("出乎意料";。
在表面上,需要两个步骤:
- 查找所有".ms"文件(使用Find…(
- 将每个转换为PDF(在查找中使用-execdir(
folder=...
find $folder -name '*.ms' -execdir sh -c 'groff -k -t -pdf -ms {} > $(basename {} .ms).pdf' ;
#!/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" ;