处理多个源文件
Asciidoctor CLI 可以在一次调用中转换多个文件。如果您向 CLI 传递多个源文件名或文件名模式,Asciidoctor 将依次转换每个文件。
假设当前目录中存在两个 AsciiDoc 文件:a.adoc 和 b.adoc。您可以使用单个命令将这两个文件传递给 Asciidoctor,如下所示:
$ asciidoctor a.adoc b.adoc
Asciidoctor 将转换这两个文件,将 a.adoc 转换为 a.html,将 b.adoc 转换为 b.html。
为了节省输入,您可以使用 glob 操作符 (*) 来匹配当前目录中的所有 AsciiDoc 文件,只需一个参数即可:
$ asciidoctor *.adoc
您的 shell 将自动展开模式并像您上面键入的那样解释该命令。
$ asciidoctor a.adoc b.adoc
您可以使用 glob 操作符 (*) 来代替目录名,来传递直接子文件夹中的所有 AsciiDoc 文件:
$ asciidoctor */*.adoc
要匹配当前目录和直接子文件夹中的所有文件,请合并这两个 glob 模式:
$ asciidoctor *.adoc */*.adoc
由于此命令中的 glob 依赖于 shell 扩展,因此该命令在不同平台之间不具有可移植性。为了使其可移植,您可以允许 Asciidoctor CLI 扩展 glob。为此,请指示 shell 不要扩展 glob,方法是引用该模式,如下所示:
$ asciidoctor '*.adoc' '*/*.adoc'
这次,参数 *.adoc 和 */*.adoc 直接传递给 Asciidoctor,而不是被展开。Asciidoctor 以一种可移植的方式跨平台处理 glob 匹配。
但还有更好的。Asciidoctor 中的 glob 处理(匹配 Ruby 中文件 globbing 的规则)可能比您的 shell 提供的更强大。例如,您可以使用双 glob 操作符 (**) 来匹配当前文件夹和任何深度的文件夹中的 AsciiDoc 文件。
$ asciidoctor '**/*.adoc'
大多数 shell 不支持此双 glob 模式。
总之,在指定 glob 模式时,我们始终建议将参数括在引号中。