Asciidoctor命令行工具可以在一次调用中转换多个文件。如果你向命令行工具传递多个源文件名或一个文件名模式,Asciidoctor将依次转换每个文件。

让我们假设当前目录中存在两个AsciiDoc文件,分别是 a.adocb.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模式时,我们总是推荐将参数用引号包围起来。