Asciidoctor命令行工具可以在一次调用中转换多个文件。如果你向命令行工具传递多个源文件名或一个文件名模式,Asciidoctor将依次转换每个文件。
让我们假设当前目录中存在两个AsciiDoc文件,分别是 a.adoc 和 b.adoc。您可以使用一条命令将这两个文件一起传递给Asciidoctor,如下所示:
$ asciidoctor a.adoc b.adoc
Asciidoctor 将转换这两个文件,将 a.adoc 转换为 a.html,并将 b.adoc 转换为 b.html。
为了节省一些打字,你可以使用通配符操作符(*
)通过单个参数来匹配当前目录中的所有AsciiDoc文件。
$ asciidoctor *.adoc
你的shell会自动扩展模式,并且像你上面输入的那样准确地解释命令:
$ asciidoctor a.adoc b.adoc
您可以使用通配符操作符(*
)替代目录名,以此来传递所有直接子文件夹内的AsciiDoc文件:
$ asciidoctor */*.adoc
要匹配当前目录及直接子文件夹中的所有文件,请组合以下两种通配模式:
$ asciidoctor .adoc */.adoc
因为这个命令中的通配符依赖于shell扩展,命令并不是跨平台的。为了使其可移植,你可以让Asciidoctor命令行界面来扩展这些通配符。为此,你应该指示shell不要扩展通配符,通过引用模式来实现,如下所示:
$ asciidoctor '.adoc' '/*.adoc'
这次,参数 *.adoc
和 */*.adoc
直接传递给Asciidoctor,而不是被展开。Asciidoctor以一种跨平台的方式处理通配符匹配。
但是它变得更好了。Asciidoctor中的glob处理(与Ruby中的文件glob处理规则相匹配)可能比你的shell提供的功能要强大。例如,您可以使用双glob运算符(**
)匹配当前文件夹和任意深度文件夹中的AsciiDoc文件。
$ asciidoctor '*/.adoc'
大多数shell不支持这种双重通配符模式。
总之,在指定一个glob模式时,我们总是推荐将参数用引号包围起来。