You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
3.1 KiB
67 lines
3.1 KiB
4 years ago
|
////
|
||
|
Included in:
|
||
|
|
||
|
- user-manual: Process multiple source files from the CLI
|
||
|
////
|
||
|
|
||
|
You can pass multiple source files or a filename pattern to the Asciidoctor CLI and it will convert each file given in turn.
|
||
|
|
||
|
Let's assume there exist two AsciiDoc files in the current directory, [.path]_a.adoc_ and [.path]_b.adoc_.
|
||
|
You can pass both files to Asciidoctor using a single command, as follows:
|
||
|
|
||
|
$ asciidoctor a.adoc b.adoc
|
||
|
|
||
|
Asciidoctor will convert both files, transforming [.path]_a.adoc_ to [.path]_a.html_ and [.path]_b.adoc_ to [.path]_b.html_.
|
||
|
|
||
|
To save some typing, you can use the glob operator (`+*+`) to match all AsciiDoc files in the current directory using a single argument:
|
||
|
|
||
|
$ asciidoctor *.adoc
|
||
|
|
||
|
Your shell will automatically expand the pattern and interpret the command exactly as you had typed it above:
|
||
|
|
||
|
$ asciidoctor a.adoc b.adoc
|
||
|
|
||
|
You can pass all AsciiDoc files inside direct subfolders using the glob operator (`+*+`) in place of the directory name:
|
||
|
|
||
|
$ asciidoctor */*.adoc
|
||
|
|
||
|
To match all files in the current directory and direct subfolders, combine both glob patterns:
|
||
|
|
||
|
$ asciidoctor *.adoc */*.adoc
|
||
|
|
||
|
Since the globs in this command rely on shell expansion, the command is not portable across platforms.
|
||
|
To make it portable, you can allow the Asciidoctor CLI to expand the globs.
|
||
|
To do so, instruct the shell to not expand the glob by quoting the pattern, as shown here:
|
||
|
|
||
|
$ asciidoctor '*.adoc' '*/*.adoc'
|
||
|
|
||
|
This time, the arguments `+*.adoc+` and `+*/*.adoc+` are passed directly to Asciidoctor instead of being expanded.
|
||
|
Asciidoctor handles the glob matching in a manner that is portable across platforms.
|
||
|
|
||
|
CAUTION: If you process multiple nested AsciiDoc files at once and are also applying a custom stylesheet to them, you'll need to <<user-manual#style-nest-doc,manage the stylesheet's location>>.
|
||
|
|
||
|
But it gets better.
|
||
|
The glob handling in Asciidoctor (which matches the rules of file globbing in Ruby) is likely more powerful than what your shell offers.
|
||
|
For example, you can match AsciiDoc files in the current folder and in folders of any depth using the double glob operator (`+**+`).
|
||
|
|
||
|
$ asciidoctor '**/*.adoc'
|
||
|
|
||
|
Most shells do not honor the double glob pattern.
|
||
|
Thus, to ensure both portability and flexibility when specifying a glob pattern, always enclose the argument in quotes.
|
||
|
|
||
|
If you specify an output folder, the source folders are not preserved by default.
|
||
|
To preserve the folders, specify which portion of the path to remove using the `-R` flag:
|
||
|
|
||
|
$ asciidoctor -D out -R src 'src/**/*.adoc'
|
||
|
|
||
|
In this case, the folder structure under the `src` folder will be replicated.
|
||
|
|
||
|
You can use the special value `.` to indicate you want the folder structure of the source and output to be mirrored exactly.
|
||
|
For example:
|
||
|
|
||
|
$ asciidoctor -D out -R . '**/*.adoc'
|
||
|
|
||
|
If you find yourself pushing the boundaries of what can be achieved using the CLI to convert multiple AsciiDoc files (including processing resources like images), consider switching to a build tool like Maven or Gradle.
|
||
|
Both tools provide excellent Asciidoctor integration.
|
||
|
Refer to the <<asciidoctor-maven-plugin.adoc#,Asciidoctor Maven plugin>> or <<asciidoctor-gradle-plugin.adoc#,Asciidoctor Gradle plugin>> for details.
|