Usage: musicXmlBulk [OPTIONS] SCRIPT_NAME_VALUE

The musicXmlBulk script calls one or more processing scripts on any combination of files, directories of files,
score names, and score IDs in one go.

In most cases, musicXmlBulk processes the input and formulates calls to the musicXmlProcess script,
so many of the rules that apply to musicXmlProcess apply to musicXmlBulk.

SCRIPT_NAME_VALUE: a single script name, or script name wildcard.

The bulk script will call combinations of the following scripts:

db2Ly
db2MusicXml
db2Pdf
ly2Pdf
musicXml2Db
musicXml2Ly
musicXml2Pdf
musicXmlCompress
musicXmlValidate

SCRIPT_NAME_VALUE examples:

musicXml2Db: will execute the musicXml2Db script on each XML file in the input file list.

musicXml2.*: will execute each of the three musicXml2* scripts on each XML file in the input file list.

.* will execute all of the scripts on every eligible value in the input list.

Options:
/f, --input-file	input file
/i, --input-directory		input directory
/o, --output-directory		output directory

Input options:

The input options direct the bulk script which files to process.

Input values can be a single directory (option -i), a list of input values in a file (option -f), or both.

Input directory option:

The script takes a single input directory as an argument.

All .xml, .mxl, .musicxml, and .ly files in the directory are added to the input list.

Input file option:

The input file is a text file that lists input values, one to a line.

Input line values can be any combination of the following:

  An input filename
  An input directory
  An input score name
  A comma-separated input score ID or score ID range

Wild cards in input values are not permitted.

Input value processing:

An input filename is added to the input list if it has an .xml, .mxl, .musicxml, or .ly
file extension.

If an input line is a directory, all .xml, .mxl, .musicxml, and .ly files in the directory are added
to the input list.

Score IDs refer to the primary key ID value in the SCORE table in the MusicXML database.

Valid score ID input is a comma-separated list of numbers or range of numbers.
Example: 2,4,6-10

Any non-numeric item in the file list that does not have a file extension is treated as a
score name and is added to the input list.

Input for each script:

Once input processing is finished, the result is an input list of filenames, score names, and/or score IDs.

musicXml* script input: All XML file input (.xml, .mxl, and .musicxml file extensions).

musicXmlCompress script input:  All uncompressed XML file input (.xml and .musicxml file extensions).

db2* script input: All score names and score IDs.

Additionally, the filenames of all .xml, .mxl, .musicxml, and .ly files in the input list are truncated by
removing the file extension, and the file's basename is treated as a score name.  The script then attempts
to process any score in the database having that score name.

ly2Pdf script input:  All LilyPond file input (.ly file extension).

Output for each script:

The output directory option is required for all scripts except musicXmlValidate and musicXml2Db.

Verbose output is used for all scripts except musicXmlCompress and musicXmlValidate.  Script output
is to stderr and can be redirected by the caller.

Output subdirectories:

The output directory passed by the output directory option must exist before the call to musicXmlBulk.

Script output is to a subdirectory of the passed output directory, one subdirectory for each script called.

The subdirectories are:
Script db2Ly: subdirectory db2ly
Script db2MusicXml: subdirectory db2musicxml
Script db2Pdf: subdirectory db2pdf
Script ly2Pdf: subdirectory ly2pdf
Script musicXml2Ly: subdirectory musicxml2ly
Script musicXml2Pdf: subdirectory musicxml2pdf
Script musicXmlCompress: subdirectory xmlcompress

The directory separation is so that multiple script calls that result in the same file type output
don't overwrite each other.

Example:
Output directory: musicxml/out
db2MusicXml script output directory: musicxml/out/db2musicxml

Output filenames:

All XML script output is an .xml file, except for musicXmlCompress which outputs an .mxl file.

The XML file in a compressed MXL file has the same basename as the containing MXL file.

The basename of the output file is the basename of the input file.

In the case of db2* scripts, the output file's basename is the score name or the score ID,
depending upon which is being processed.