neulab/tldr huggingface dataset:
would exclude just the file or directory called "html" from the "src" directory. Any other file or directory called "html" in the tree will not be excluded.  Should be used with the -hide and/or -hide-joliet options.  In order to match a directory name, make sure the pathname does not include a trailing '/' character. See README.hide for more details.
-hide-hfs-list file A file containing a list of globs to be hidden as above.
-hfs-volid hfs_volid Volume name for the HFS partition. This is the name that is assigned to the disc on a Macintosh and replaces the volid used with the -V option
-icon-position Use the icon position information, if it exists, from the Apple/Unix file.  The icons will appear in the same position as they would on a Macintosh desktop. Folder location and size on screen, its scroll positions, folder View (view as Icons, Small Icons, etc.) are also preserved.  This option may become set by default in the future.  (Alpha).
-root-info file Set the location, size on screen, scroll positions, folder View etc. for the root folder of an HFS volume. See README.rootinfo for more information.  (Alpha)
-prep-boot FILE PReP boot image file. Up to 4 are allowed. See README.prep_boot (Alpha)
-chrp-t Create a CHRP boot in boot partition 1.  See -prep-boot for further information.
-input-hfs-charset charset Input charset that defines the characters used in HFS file names when used with the -mac-name option.  The default charset is cp10000 (Mac Roman) cp10000 (Mac Roman) See CHARACTER SETS and HFS MACINTOSH FILE NAMES sections below for more details.
-output-hfs-charset charset Output charset that defines the characters that will be used in the HFS file names. Defaults to the input charset. See CHARACTER SETS section below for more details.
-hfs-unlock By default, mkisofs will create an HFS volume that is locked. This option leaves the volume unlocked so that other applications (e.g.  hfsutils) can modify the volume. See the HFS PROBLEMS/LIMITATIONS section below for warnings about using this option.
-hfs-bless folder_name "Bless" the given directory (folder). This is usually the System Folder and is used in creating HFS bootable CDs. The name of the directory must be the whole path name as mkisofs sees it. e.g. if the given pathspec is ./cddata and the required folder is called System Folder, then the whole path name is "./cddata/System Folder" (remember to use quotes if the name contains spaces).
-hfs-parms PARAMETERS Override certain parameters used to create the HFS file system. Unlikely to be used in normal circumstances. See the libhfs_iso/hybrid.h source file for details.
--cap  Look for AUFS CAP Macintosh files. Search for CAP Apple/Unix file formats only. Searching for the other possible Apple/Unix file formats is disabled, unless other double dash options are given.
--netatalk Look for NETATALK Macintosh files
--double Look for AppleDouble Macintosh files
--ethershare Look for Helios EtherShare Macintosh files
--ushare Look for IPT UShare Macintosh files
--exchange Look for PC Exchange Macintosh files
--sgi  Look for SGI Macintosh files
--xinet Look for XINET Macintosh files
--macbin Look for MacBinary Macintosh files
--single Look for AppleSingle Macintosh files
--dave Look for Thursby Software Systems DAVE Macintosh files
--sfm  Look for Microsoft's Services for Macintosh files (NT only) (Alpha)
--osx-double Look for MacOS X AppleDouble Macintosh files
--osx-hfs Look for MacOS X HFS Macintosh files
mkisofs processes file names in a POSIX compliant way as strings of 8-bit characters.  To represent all codings for all languages, 8-bit characters are not sufficient. Unicode or ISO-10646 define character codings that need at least 21 bits to represent all known languages. They may be represented with UTF-32, UTF-16 or UTF-8 coding.  UTF-32 uses a plain 32-bit coding but seems to be uncommon.  UCS-2 is used by Microsoft with Win32.  This coding is similar to UTF-16 with the disadvantage that it only supports a 16 bit subset (except when surrogates are used) of all codes and that 16-bit characters are not compliant with the POSIX filesystem interface.
Modern UNIX operating systems may use UTF-8 coding for filenames. This coding allows to use the complete Unicode code set.  Each 32-bit character is represented by one or more 8-bit characters.  If a character is coded in ISO-8859-1 (used in Central Europe and North America) it maps 1:1 to a UTF-32 or UTF-16 coded Unicode character.  If a character is coded in 7-Bit ASCII (used in USA and other countries with limited character set) it maps 1:1 to a UTF-32, UTF-16 or UTF-8 coded Unicode character.  Character codes that cannot be represented as a single byte in UTF-8 (typically if the value is > 0x7F) use escape sequences that map to more than one 8-bit character.
If all operating systems would use UTF-8 coding, mkisofs would not need to recode characters in file names.  Unfortunately, Apple uses completely nonstandard codings and Microsoft uses a Unicode coding that is not compatible with the POSIX filename interface.
For all non UTF-8 coded operating systems, the actual character that each byte represents, depends on the character set or codepage (which is the name used by Microsoft) used by the local operating system in use - the characters in a character set will reflect the region or natural language used by the user.
Usually character codes 0x00-0x1f are control characters, codes 0x20-0x7f are the 7 bit ASCII characters and (on PC's and Mac's) 0x80-0xff are used for other characters.  Unfortunately even this does not follow ISO standards that reserve the range 0x80-0x9f for control characters and only allow 0xa0-0xff for other characters.
As there is a lot more than 256 characters/symbols in use, only a small subset are represented in a character set. Therefore the same character code may represent a different character in different character sets. So a file name generated, say in central Europe, may not display the same character when viewed on a machine in, say eastern Europe.
To make matters more complicated, different operating systems use different character sets for the region or language. For example the character code for "small e with acute accent" may be character code 0x82 on a PC, code 0x8e on a Macintosh and code 0xe9 on a UNIX system.  Note while the codings used on a PC or Mac are nonstandard, Unicode codes this character as 0x00000000e9 which is basically the same value as the value used by most UNIX systems.
As long as not all operating systems and applications will use the Unicode character set as the basis for file names in a unique way, it may be necessary to specify which character set your file names use in and which character set the file names should appear on the CD.
There are four options to specify the character sets you want to use:
-input-charset Defines the local character set you are using on your host machine.  Any character set conversions that take place will use this character set as the staring point. The default input character sets are cp437 on DOS based systems and iso8859-1 on all other systems.
If the -J option is given, then the Unicode equivalents of the input character set will be used in the Joliet directory. Using the -jcharset option is the same as using the -input-charset and -J options.
-output-charset Defines the character set that will be used with for the Rock Ridge names on the CD. Defaults to the input character set. Only likely to be useful if used on a non-Unix platform. e.g. using mkisofs on a Microsoft Win32 machine to create Rock Ridge CDs. If you are using mkisofs on a Unix machine, it is likely that the output character set will be the same as the input character set.
-input-hfs-charset Defines the HFS character set used for HFS file names decoded from any of the various Apple/Unix file formats. Only useful when used with -mac-name option. See the HFS MACINTOSH FILE NAMES for more information. Defaults to cp10000 (Mac Roman).
-output-hfs-charset Defines the HFS character set used to create HFS file names from the input character set in use. In most cases this will be from the character set given with the -input-charset option. Defaults to the input HFS character set.
The default character set is built into mkisofs.  A number of further character sets are read in from the filesystem by mkisofs from a directory relatively to the install path.  To get a listing, use mkisofs -input-charset help.
Additional character sets from iconv(1) may be used on systems, that support iconv(1).  In this case, call iconv -l to get a list of valid character sets from this coding method.  To force an iconv(1) based coding, use iconv:name instead of name for the character set.
If using non iconv(1) based character sets, additional character sets can be read from file for any of the character set options by giving a filename as the argument to the options. A given character set will be read from a file whenever the supplied name contains a '/'.
The format of the character set files is the same as the mapping files available from http://www.unicode.org/Public/MAPPINGS The format of these files is:
Column #1 is the input byte code (in hex as 0xXX) Column #2 is the Unicode (in hex as 0xXXXX) Rest of the line is ignored.
Any blank line, line without two (or more) columns in the above format or comments lines (starting with the # character) are ignored without any warnings. Any missing input code is mapped to Unicode character 0x0000.
Note that there is no support for 16 bit UNICODE (UTF-16) or 32 bit UNICODE (UTF-32) coding because this coding is not POSIX compliant. There should be support for UTF-8 UNICODE coding which is compatible to POSIX filenames and supported by moder UNIX implementations such as Solaris.
A 1:1 character set mapping can be defined by using the keyword default as the argument to any of the character set options. This is the behaviour of older (v1.12) versions of mkisofs.
The ISO-9660 file names generated from the input filenames are not converted from the input character set. The ISO-9660 character set is a very limited subset of the ASCII characters, so any conversion would be pointless.
Any character that mkisofs can not convert will be replaced with a '_' character.
HFS CREATOR/TYPE A Macintosh file has two properties associated with it which define which application created the file, the CREATOR and what data the file contains, the TYPE.  Both are (exactly) 4 letter strings. Usually this allows a Macintosh user to double-click on a file and launch the correct application etc. The CREATOR and TYPE of a particular file can be found by using something like ResEdit (or similar) on a Macintosh.
The CREATOR and TYPE information is stored in all the various Apple/Unix encoded files.  For other files it is possible to base the CREATOR and TYPE on the filename's extension using a mapping file (the -map option) and/or using the magic number (usually a signature in the first few bytes) of a file (the -magic option). If both these options are given, then their order on the command line is important. If the -map option is given first, then a filename extension match is attempted before a magic number match. However, if the -magic option is given first, then a magic number match is attempted before a filename extension match.
If a mapping or magic file is not used, or no match is found then the default CREATOR and TYPE for all regular files can be set by using entries in the .mkisofsrc file or using the -hfs-creator and/or -hfs-type options, otherwise the default CREATOR and TYPE are 'unix' and 'TEXT'.
The format of the mapping file is the same afpfile format as used by aufs.  This file has five columns for the extension, file translation, CREATOR, TYPE and Comment.  Lines starting with the '#' character are comment lines and are ignored. An example file would be like:
# Example filename mapping file # # EXTN   XLate   CREATOR   TYPE     Comment .tif     Raw     '8BIM'    'TIFF'   "Photoshop TIFF image" .hqx     Ascii   'BnHq'    'TEXT'   "BinHex file" .doc     Raw     'MSWD'    'WDBN'   "Word file" .mov     Raw     'TVOD'    'MooV'   "QuickTime Movie" *        Ascii   'ttxt'    'TEXT'   "Text file"
The first column EXTN defines the Unix filename extension to be mapped. The default mapping for any filename extension that doesn't match is defined with the "*" character.
The Xlate column defines the type of text translation between the Unix and Macintosh file it is ignored by mkisofs, but is kept to be compatible with aufs(1).  Although mkisofs does not alter the contents of a file, if a binary file has its TYPE set as 'TEXT', it may be read incorrectly on a Macintosh. Therefore a better choice for the default TYPE may be '????'
The CREATOR and TYPE keywords must be 4 characters long and enclosed in single quotes.
The comment field is enclosed in double quotes - it is ignored by mkisofs, but is kept to be compatible with aufs.
The format of the magic file is almost identical to the magic(4) file used by the Linux file(1) command - the routines for reading and decoding the magic file are based on the Linux file(1) command.
This file has four tab separated columns for the byte offset, type, test and message.  Lines starting with the '#' character are comment lines and are ignored. An example file would be like:
# Example magic file # # off   type      test       message 0       string    GIF8       8BIM GIFf  GIF image 0       beshort   0xffd8     8BIM JPEG  image data 0       string    SIT!       SIT! SIT!  StuffIt Archive 0       string    \037\235   LZIV ZIVU  standard unix compress 0       string    \037\213   GNUz ZIVU  gzip compressed data 0       string    %!         ASPS TEXT  Postscript 0       string    \004%!     ASPS TEXT  PC Postscript with a ^D to start 4       string    moov       txtt MooV  QuickTime movie file (moov) 4       string    mdat       txtt MooV  QuickTime movie file (mdat)
The format of the file is described in the magic(4) man page. The only difference here is that for each entry in the magic file, the message for the initial offset must be 4 characters for the CREATOR followed by 4 characters for the TYPE - white space is optional between them. Any other characters on this line are ignored.  Continuation lines (starting with a '>') are also ignored i.e. only the initial offset lines are used.
Using the -magic option may significantly increase processing time as each file has to opened and read to find its magic number.
In summary, for all files, the default CREATOR is 'unix' and the default TYPE is 'TEXT'.  These can be changed by using entries in the .mkisofsrc file or by using the -hfs-creator and/or -hfs-type options.
If the a file is in one of the known Apple/Unix formats (and the format has been selected), then the CREATOR and TYPE are taken from the values stored in the Apple/Unix file.
Other files can have their CREATOR and TYPE set from their file name extension (the -map option), or their magic number (the -magic option). If the default match is used in the mapping file, then these values override the default CREATOR and TYPE.
A full CREATOR/TYPE database can be found at http://www.angelfire.com/il/szekely/index.html
Macintosh files have two parts called the Data and Resource fork. Either may be empty. Unix (and many other OSs) can only cope with files having one part (or fork). To add to this, Macintosh files have a number of attributes associated with them - probably the most important are the TYPE and CREATOR. Again Unix has no concept of these types of attributes.
e.g. a Macintosh file may be a JPEG image where the image is stored in the Data fork and a desktop thumbnail stored in the Resource fork. It is usually the information in the data fork that is useful across platforms.
Therefore to store a Macintosh file on a Unix filesystem, a way has to be found to cope with the two forks and the extra attributes (which are referred to as the finder info).  Unfortunately, it seems that every software package that stores Macintosh files on Unix has chosen a completely different storage method.
The Apple/Unix formats that mkisofs (partially) supports are:
CAP AUFS format Data fork stored in a file. Resource fork in subdirectory .resource with same filename as data fork. Finder info in .finderinfo subdirectory with same filename.
AppleDouble/Netatalk Data fork stored in a file. Resource fork stored in a file with same name prefixed with "%". Finder info also stored in same "%" file. Netatalk uses the same format, but the resource fork/finderinfo stored in subdirectory .AppleDouble with same name as data fork.
AppleSingle Data structures similar to above, except both forks and finder info are stored in one file.
Helios EtherShare Data fork stored in a file. Resource fork and finder info together in subdirectory .rsrc with same filename as data fork.
IPT UShare Very similar to the EtherShare format, but the finder info is stored slightly differently.
MacBinary Both forks and finder info stored in one file.
Apple PC Exchange Used by Macintoshes to store Apple files on DOS (FAT) disks.  Data fork stored in a file. Resource fork in subdirectory resource.frk (or RESOURCE.FRK). Finder info as one record in file finder.dat (or FINDER.DAT). Separate finder.dat for each data fork directory.
Note: mkisofs needs to know the native FAT cluster size of the disk that the PC Exchange files are on (or have been copied from). This size is given by the -cluster-size option.  The cluster or allocation size can be found by using the DOS utility CHKDSK.
May not work with PC Exchange v2.2 or higher files (available with MacOS 8.1).  DOS media containing PC Exchange files should be mounted as type msdos (not vfat) when using Linux.
SGI/XINET Used by SGI machines when they mount HFS disks. Data fork stored in a file. Resource fork in subdirectory .HSResource with same name. Finder info as one record in file .HSancillary. Separate .HSancillary for each data fork directory.
Thursby Software Systems DAVE Allows Macintoshes to store Apple files on SMB servers.  Data fork stored in a file. Resource fork in subdirectory resource.frk. Uses the AppleDouble format to store resource fork.
Services for Macintosh Format of files stored by NT Servers on NTFS filesystems. Data fork is stored as "filename". Resource fork stored as a NTFS stream called "filename:AFP_Resource". The finder info is stored as a NTFS stream called "filename:Afp_AfpInfo". These streams are normally invisible to the user.
Warning: mkisofs only partially supports the SFM format. If an HFS file or folder stored on the NT server contains an illegal NT character in its name, then NT converts these characters to Private Use Unicode characters. The characters are: " * / < > ?  | also a space or period if it is the last character of the file name, character codes 0x01 to 0x1f (control characters) and Apple' apple logo.
Unfortunately, these private Unicode characters are not readable by the mkisofs NT executable. Therefore any file or directory name containing these characters will be ignored - including the contents of any such directory.
MacOS X AppleDouble When HFS/HFS+ files are copied or saved by MacOS X on to a non-HFS file system (e.g. UFS, NFS etc.), the files are stored in AppleDouble format.  Data fork stored in a file. Resource fork stored in a file with same name prefixed with "._". Finder info also stored in same "._" file.
MacOS X HFS (Alpha) Not really an Apple/Unix encoding, but actual HFS/HFS+ files on a MacOS X system. Data fork stored in a file. Resource fork stored in a pseudo file with the same name with the suffix '/rsrc'. The finderinfo is only available via a MacOS X library call.
Notes: (also see README.macosx)
Only works when used on MacOS X.
If a file is found with a zero length resource fork and empty finderinfo, it is assumed not to have any Apple/Unix encoding - therefore a TYPE and CREATOR can be set using other methods.
mkisofs will attempt to set the CREATOR, TYPE, date and possibly other flags from the finder info. Additionally, if it exists, the Macintosh filename is set from the finder info, otherwise the Macintosh name is based on the Unix filename - see the HFS MACINTOSH FILE NAMES section below.
When using the -apple option, the TYPE and CREATOR are stored in the optional System Use or SUSP field in the ISO-9660 Directory Record - in much the same way as the Rock Ridge attributes are. In fact to make life easy, the Apple extensions are added at the beginning of the existing Rock Ridge attributes (i.e. to get the Apple extensions you get the Rock Ridge extensions as well).
The Apple extensions require the resource fork to be stored as an ISO-9660 associated file. This is just like any normal file stored in the ISO-9660 filesystem except that the associated file flag is set in the Directory Record (bit 2). This file has the same name as the data fork (the file seen by non-Apple machines). Associated files are normally ignored by other OSs
When using the -hfs option, the TYPE and CREATOR plus other finder info, are stored in a separate HFS directory, not visible on the ISO-9660 volume. The HFS directory references the same data and resource fork files described above.
In most cases, it is better to use the -hfs option instead of the -apple option, as the latter imposes the limited ISO-9660 characters allowed in filenames. However, the Apple extensions do give the advantage that the files are packed on the disk more efficiently and it may be possible to fit more files on a CD - important when the total size of the source files is approaching 650MB.
Where possible, the HFS filename that is stored with an Apple/Unix file is used for the HFS part of the CD. However, not all the Apple/Unix encodings store the HFS filename with the finderinfo. In these cases, the Unix filename is used - with escaped special characters. Special characters include '/' and characters with codes over 127.
Aufs escapes these characters by using ":" followed by the character code as two hex digits. Netatalk and EtherShare have a similar scheme, but uses "%" instead of a ":".
If mkisofs can't find an HFS filename, then it uses the Unix name, with any %xx or :xx characters (xx == two hex digits) converted to a single character code. If "xx" are not hex digits ([0-9a-fA-F]), then they are left alone - although any remaining ":" is converted to "%" as colon is the HFS directory separator. Care must be taken, as an ordinary Unix file with %xx or :xx will also be converted. e.g.
This:2fFile   converted to This/File
This:File     converted to This%File
This:t7File   converted to This%t7File
Although HFS filenames appear to support upper and lower case letters, the filesystem is case insensitive. i.e. the filenames "aBc" and "AbC" are the same. If a file is found in a directory with the same HFS name, then mkisofs will attempt, where possible, to make a unique name by adding '_' characters to one of the filenames.
If an HFS filename exists for a file, then mkisofs can use this name as the starting point for the ISO-9660, Joliet and Rock Ridge filenames using the -mac-name option. Normal Unix files without an HFS name will still use their Unix name.  e.g.
If a MacBinary (or PC Exchange) file is stored as someimage.gif.bin on the Unix filesystem, but contains a HFS file called someimage.gif, then this is the name that would appear on the HFS part of the CD. However, as mkisofs uses the Unix name as the starting point for the other names, then the ISO-9660 name generated will probably be SOMEIMAG.BIN and the Joliet/Rock Ridge would be someimage.gif.bin.  Although the actual data (in this case) is a GIF image. This option will use the HFS filename as the starting point and the ISO-9660 name will probably be SOMEIMAG.GIF and the Joliet/Rock Ridge would be someimage.gif.
Using the -mac-name option will not currently work with the -T option - the Unix name will be used in the TRANS.TBL file, not the Macintosh name.
The character set used to convert any HFS file name to a Joliet/Rock Ridge file name defaults to cp10000 (Mac Roman).  The character set used can be specified using the -input-hfs-charset option. Other built in HFS character sets are: cp10006 (MacGreek), cp10007 (MacCyrillic), cp10029 (MacLatin2), cp10079 (MacIcelandic) and cp10081 (MacTurkish).
Note: the character codes used by HFS file names taken from the various Apple/Unix formats will not be converted as they are assumed to be in the correct Apple character set. Only the Joliet/Rock Ridge names derived from the HFS file names will be converted.
The existing mkisofs code will filter out any illegal characters for the ISO-9660 and Joliet filenames, but as mkisofs expects to be dealing directly with Unix names, it leaves the Rock Ridge names as is.  But as '/' is a legal HFS filename character, the -mac-name option converts '/' to a '_' in Rock Ridge filenames.
If the Apple extensions are used, then only the ISO-9660 filenames will appear on the Macintosh. However, as the Macintosh ISO-9660 drivers can use Level 2 filenames, then you can use options like -allow-multidot without problems on a Macintosh - still take care over the names, for example this.file.name will be converted to THIS.FILE i.e. only have one '.', also filename abcdefgh will be seen as ABCDEFGH but abcdefghi will be seen as ABCDEFGHI.  i.e. with a '.' at the end - don't know if this is a Macintosh problem or mkisofs/mkhybrid problem. All filenames will be in upper case when viewed on a Macintosh. Of course, DOS/Win3.X machines will not be able to see Level 2 filenames...
HFS CUSTOM VOLUME/FOLDER ICONS To give a HFS CD a custom icon, make sure the root (top level) folder includes a standard Macintosh volume icon file. To give a volume a custom icon on a Macintosh, an icon has to be pasted over the volume's icon in the "Get Info" box of the volume. This creates an invisible file called 'Icon\r' ('\r' is the 'carriage return' character) in the root folder.
A custom folder icon is very similar - an invisible file called 'Icon\r' exits in the folder itself.
Probably the easiest way to create a custom icon that mkisofs can use, is to format a blank HFS floppy disk on a Mac, paste an icon to its "Get Info" box. If using Linux with the HFS module installed, mount the floppy using something like:
mount -t hfs /dev/fd0 /mnt/floppy
The floppy will be mounted as a CAP file system by default. Then run mkisofs using something like:
mkisofs --cap -o output source_dir /mnt/floppy
If you are not using Linux, then you can use the hfsutils to copy the icon file from the floppy. However, care has to be taken, as the icon file contains a control character. e.g.
hmount /dev/fd0 hdir -a hcopy -m Icon^V^M icon_dir/icon
Where '^V^M' is control-V followed by control-M. Then run mkisofs by using something like:
mkisofs --macbin -o output source_dir icon_dir
The procedure for creating/using custom folder icons is very similar - paste an icon to folder's "Get Info" box and transfer the resulting 'Icon\r' file to the relevant directory in the mkisofs source tree.
You may want to hide the icon files from the ISO-9660 and Joliet trees.
To give a custom icon to a Joliet CD, follow the instructions found at: http://www.fadden.com/cdrfaq/faq03.html#[3-21]
It may be possible to make the hybrid CD bootable on a Macintosh.
A bootable HFS CD requires an Apple CD-ROM (or compatible) driver, a bootable HFS partition and the necessary System, Finder, etc. files.
A driver can be obtained from any other Macintosh bootable CD-ROM using the apple_driver utility. This file can then be used with the -boot-hfs-file option.
The HFS partition (i.e. the hybrid disk in our case) must contain a suitable System Folder, again from another CD-ROM or disk.
For a partition to be bootable, it must have its boot block set. The boot block is in the first two blocks of a partition. For a non-bootable partition the boot block is full of zeros. Normally, when a System file is copied to partition on a Macintosh disk, the boot block is filled with a number of required settings - unfortunately I don't know the full spec for the boot block, so I'm guessing that the following will work OK.
Therefore, the utility apple_driver also extracts the boot block from the first HFS partition it finds on the given CD-ROM and this is used for the HFS partition created by mkisofs.
PLEASE NOTE By using a driver from an Apple CD and copying Apple software to your CD, you become liable to obey Apple Computer, Inc. Software License Agreements.
When the -boot-info-table option is given, mkisofs will modify the boot file specified by the -b option by inserting a 56-byte "boot information table" at offset 8 in the file.  This modification is done in the source filesystem, so make sure you use a copy if this file is not easily recreated!  This file contains pointers which may not be easily or reliably obtained at boot time.
The format of this table is as follows; all integers are in section 7.3.1 ("little endian") format.
Offset    Name           Size      Meaning 8        bi_pvd         4 bytes   LBA of primary volume descriptor 12        bi_file        4 bytes   LBA of boot file 16        bi_length      4 bytes   Boot file length in bytes 20        bi_csum        4 bytes   32-bit checksum 24        bi_reserved    40 bytes  Reserved
The 32-bit checksum is the sum of all the 32-bit words in the boot file starting at byte offset 64.  All linear block addresses (LBAs) are given in CD sectors (normally 2048 bytes).
mkisofs looks for the .mkisofsrc file, first in the current working directory, then in the user's home directory, and then in the directory in which the mkisofs binary is stored.  This file is assumed to contain a series of lines of the form TAG=value , and in this way you can specify certain options.  The case of the tag is not significant.  Some fields in the volume header are not settable on the command line, but can be altered through this facility.  Comments may be placed in this file, using lines which start with a hash (#) character.
APPI   The application identifier should describe the application that will be on the disc.  There is space on the disc for 128 characters of information.  The related Joliet entry is limited to 64 characters.  May be overridden using the -A command line option.
COPY   The copyright information, often the name of a file on the disc containing the copyright notice.  There is space in the disc for 37 characters of information.  The related Joliet entry is limited to 18 characters.  May be overridden using the -copyright command line option.
ABST   The abstract information, often the name of a file on the disc containing an abstract.  There is space in the disc for 37 characters of information.  The related Joliet entry is limited to 18 characters.  May be overridden using the -abstract command line option.
BIBL   The bibliographic information, often the name of a file on the disc containing a bibliography.  There is space in the disc for 37 characters of information.  The related Joliet entry is limited to 18 characters.  May be overridden using the -bilio command line option.
PREP   This should describe the preparer of the CDROM, usually with a mailing address and phone number.  There is space on the disc for 128 characters of information.  The related Joliet entry is limited to 64 characters.  May be overridden using the -p command line option.
PUBL   This should describe the publisher of the CDROM, usually with a mailing address and phone number.  There is space on the disc for 128 characters of information.  The related Joliet entry is limited to 64 characters.  May be overridden using the -publisher command line option.
SYSI   The System Identifier.  There is space on the disc for 32 characters of information.  May be overridden using the -sysid command line option.
VOLI   The Volume Identifier.  There is space on the disc for 32 characters of information.  May be overridden using the -V command line option.
VOLS   The Volume Set Name.  There is space on the disc for 128 characters of information.  The related Joliet entry is limited to 64 characters.  May be overridden using the -volset command line option.
HFS_TYPE The default TYPE for Macintosh files. Must be exactly 4 characters.  May be overridden using the -hfs-type command line option.
HFS_CREATOR The default CREATOR for Macintosh files. Must be exactly 4 characters.  May be overridden using the -hfs-creator command line option.
mkisofs can also be configured at compile time with defaults for many of these fields.  See the file defaults.h.
To create a vanilla ISO-9660 filesystem image in the file cd.iso, where the directory cd_dir will become the root directory of the CD ISO image, call:
% mkisofs -o cd.iso cd_dir
To create a CD with Rock Ridge extensions of the source directory cd_dir:
% mkisofs -o cd.iso -R cd_dir
To create a CD with Rock Ridge extensions of the source directory cd_dir where all files have at least read permission and all files are owned by root, call:
% mkisofs -o cd.iso -r cd_dir
To write a tar archive directly to a CD that will later contain a simple ISO-9660 filesystem with the tar archive call:
% star -c . | mkisofs -stream-media-size 333000 | \ cdrecord dev=b,t,l -dao tsize=333000s -
To create a HFS hybrid CD with the Joliet and Rock Ridge extensions of the source directory cd_dir:
% mkisofs -o cd.iso -R -J -hfs cd_dir
To create a HFS hybrid CD from the source directory cd_dir that contains Netatalk Apple/Unix files:
% mkisofs -o cd.iso --netatalk cd_dir
To create a HFS hybrid CD from the source directory cd_dir, giving all files CREATOR and TYPES based on just their filename extensions listed in the file "mapping".:
% mkisofs -o cd.iso -map mapping cd_dir
To create a CD with the 'Apple Extensions to ISO-9660', from the source directories cd_dir and another_dir.  Files in all the known Apple/Unix format are decoded and any other files are given CREATOR and TYPE based on their magic number given in the file "magic":
% mkisofs -o cd.iso -apple -magic magic -probe \ cd_dir another_dir
The following example puts different files on the CD that all have the name README, but have different contents when seen as a ISO-9660/RockRidge, Joliet or HFS CD.
Current directory contains:
% ls -F README.hfs     README.joliet  README.unix    cd_dir/
The following command puts the contents of the directory cd_dir on the CD along with the three README files - but only one will be seen from each of the three filesystems:
% mkisofs -o cd.iso -hfs -J -r -graft-points \ -hide README.hfs -hide README.joliet \ -hide-joliet README.hfs -hide-joliet README.unix \ -hide-hfs README.joliet -hide-hfs README.unix \ README=README.hfs README=README.joliet \ README=README.unix cd_dir
i.e. the file README.hfs will be seen as README on the HFS CD and the other two README files will be hidden. Similarly for the Joliet and ISO-9660/RockRidge CD.
There are probably all sorts of strange results possible with combinations of the hide options ...
To create a DVD-Audio of the DVD-Audio compliant source directory DVD:
% mkisofs -o dvda.iso -dvd-audio DVD
Eric Youngdale <ericy@gnu.ai.mit.edu> or <eric@andante.org> wrote the first versions (1993 ... 1998) of the mkisofs utility.  The copyright for old versions of the mkisofs utility is held by Yggdrasil Computing, Incorporated.  Joerg Schilling wrote the SCSI transport library and its adaptation layer to mkisofs and newer parts (starting from 1997) of the utility.  Joerg Schilling is the primary maintainer since 1999, this makes mkisofs Copyright (C) 1997-2014 Joerg Schilling.
HFS hybrid code Copyright (C) James Pearson 1997 ... 2001.
libhfs code Copyright (C) 1996, 1997 Robert Leslie.
libfile code Copyright (C) Ian F. Darwin 1986, 1987, 1989, 1990, 1991, 1992, 1994, 1995.
Mkisofs may safely be installed suid root. This may be needed to allow mkisofs to read the previous session when creating a multi session image.
mkisofs is not based on the standard mk*fs tools for unix, because we must generate a complete copy of an existing filesystem on a disk in the ISO-9660 filesystem.  The name mkisofs is probably a bit of a misnomer, since it not only creates the filesystem, but it also populates it as well.  However, the appropriate tool name for a UNIX tool that creates populated filesystems - mkproto - is not well known.
If mkisofs is creating a filesystem image with Rock Ridge attributes and the directory nesting level of the source directory tree is too much for ISO-9660, mkisofs will do deep directory relocation.  This results in a directory called RR_MOVED in the root directory of the CD. You cannot avoid this directory in the directory tree that is visible with ISO-9660 but it it automatically hidden in the Rock Ridge tree.
The sparc boot support that is implemented with the -sparc-boot options completely follows the official Sparc CD boot requirements from the Boot prom in Sun Sparc systems. Some Linux distributions for Sparc systems use a boot loader called SILO that unfortunately is not Sparc CD boot compliant.  It is annoyingly to see that the Authors of SILO don't fix SILO but instead provide a completely unneeded "patch" to mkisofs that incorporates far more source than the fix for SILO would need.
•      Does not properly read relocated directories in multi-session mode when adding data.
Any relocated deep directory is lost if the new session does not include the deep directory.
Repeat by: create first session with deep directory relocation then add new session with a single dir that differs from the old deep path.
•      Does not re-use RR_MOVED when doing multi-session from TRANS.TBL
There may be some other ones.  Please, report them to the author.
HFS PROBLEMS/LIMITATIONS I have had to make several assumptions on how I expect the modified libhfs routines to work, however there may be situations that either I haven't thought of, or come across when these assumptions fail. Therefore I can't guarantee that mkisofs will work as expected (although I haven't had a major problem yet). Most of the HFS features work fine, however, some are not fully tested. These are marked as Alpha above.
HFS file/directory names that share the first 31 characters have _N' (N == decimal number) substituted for the last few characters to generate unique names.
Care must be taken when "grafting" Apple/Unix files or directories (see above for the method and syntax involved). It is not possible to use a new name for an Apple/Unix encoded file/directory. e.g. If a Apple/Unix encoded file called "oldname" is to added to the CD, then you can not use the command line:
mkisofs -o output.raw -hfs -graft-points newname=oldname cd_dir
mkisofs will be unable to decode "oldname". However, you can graft Apple/Unix encoded files or directories as long as you do not attempt to give them new names as above.
When creating an HFS volume with the multisession options, -M and -C, only files in the last session will be in the HFS volume. i.e. mkisofs can not add existing files from previous sessions to the HFS volume.
However, if each session is created with the -part option, then each session will appear as separate volumes when mounted on a Mac. In this case, it is worth using the -V or -hfs-volid option to give each session a unique volume name, otherwise each "volume" will appear on the Desktop with the same name.
Symbolic links (as with all other non-regular files) are not added to the HFS directory.
Hybrid volumes may be larger than pure ISO-9660 volumes containing the same data. In some cases (e.g. DVD sized volumes) the hybrid volume may be significantly larger. As an HFS volume gets bigger, so does the allocation block size (the smallest amount of space a file can occupy). For a 650Mb CD, the allocation block is 10Kb, for a 4.7Gb DVD it will be about 70Kb.
The maximum number of files in an HFS volume is about 65500 - although the real limit will be somewhat less than this.
The resulting hybrid volume can be accessed on a Unix machine by using the hfsutils routines. However, no changes can be made to the volume as it is set as locked.  The option -hfs-unlock will create an output image that is unlocked - however no changes should be made to the contents of the volume (unless you really know what you are doing) as it's not a "real" HFS volume.
Although mkisofs does not alter the contents of a file, if a binary file has its TYPE set as 'TEXT', it may be read incorrectly on a Macintosh. Therefore a better choice for the default TYPE may be '????'
The -mac-boot-file option may not work at all...
The SFM format is only partially supported - see HFS MACINTOSH FILE FORMATS section above.
It is not possible to use the the -sparc-boot or -generic-boot options with the -boot-hfs-file the -prep-boot or -chrp-boot options.
mkisofs should be able to create HFS hybrid images over 4Gb, although this has not been fully tested.
cdrecord(1), mkzftree(1), sfind(1), magic(5), apple_driver(8).
Some sort of gui interface.
mkisofs is available as part of the cdrecord package from https://sourceforge.net/projects/cdrtools/files/
hfsutils from ftp://ftp.mars.org/pub/hfs
mkzftree is available as part of the zisofs-tools package from ftp://ftp.kernel.org/pub/linux/utils/fs/zisofs/
If you want to actively take part on the development of mkisofs, you may join the developer mailing list via this URL:
https://lists.sourceforge.net/lists/listinfo/cdrtools-developers
James Pearson
j.pearson@ge.ucl.ac.uk
If you have support questions, send them to:
cdrtools-support@lists.sourceforge.net
If you definitely found a bug, send a mail to:
cdrtools-developers@lists.sourceforge.net or joerg.schilling@fokus.fraunhofer.de
To subscribe, use:
https://lists.sourceforge.net/lists/listinfo/cdrtools-developers or https://lists.sourceforge.net/lists/listinfo/cdrtools-support
The interfaces provided by mkisofs are designed for long term stability. As mkisofs depends on interfaces provided by the underlying operating system, the stability of the interfaces offered by mkisofs depends on the interface stability of the OS interfaces.  Modified interfaces in the OS may enforce modified interfaces in mkisofs.
SET(1P)                     POSIX Programmer's Manual                    SET(1P)
set — set or unset options and positional parameters
set [-abCefhmnuvx] [-o option] [argument...]
set [+abCefhmnuvx] [+o option] [argument...]
set -- [argument...]
set -o
set +o
If no options or arguments are specified, set shall write the names and values of all shell variables in the collation sequence of the current locale. Each name shall start on a separate line, using the format:
"%s=%s\n", <name>, <value>
The value string shall be written with appropriate quoting; see the description of shell quoting in Section 2.2, Quoting.  The output shall be suitable for reinput to the shell, setting or resetting, as far as possible, the variables that are currently set; read-only variables cannot be reset.
When options are specified, they shall set or unset attributes of the shell, as described below. When arguments are specified, they cause positional parameters to be set or unset, as described below. Setting or unsetting attributes and positional parameters are not necessarily related actions, but they can be combined in a single invocation of set.
The set special built-in shall support the Base Definitions volume of POSIX.1‐2017, Section 12.2, Utility Syntax Guidelines except that options can be specified with either a leading <hyphen-minus> (meaning enable the option) or <plus-sign> (meaning disable it) unless otherwise specified.
Implementations shall support the options in the following list in both their <hyphen-minus> and <plus-sign> forms. These options can also be specified as options to sh.
-a    When this option is on, the export attribute shall be set for each variable to which an assignment is performed; see the Base Definitions volume of POSIX.1‐2017, Section 4.23, Variable Assignment.  If the assignment precedes a utility name in a command, the export attribute shall not persist in the current execution environment after the utility completes, with the exception that preceding one of the special built-in utilities causes the export attribute to persist after the built-in has completed. If the assignment does not precede a utility name in the command, or if the assignment is a result of the operation of the getopts or read utilities, the export attribute shall persist until the variable is unset.
-b    This option shall be supported if the implementation supports the User Portability Utilities option. It shall cause the shell to notify the user asynchronously of background job completions. The following message is written to standard error:
"[%d]%c %s%s\n", <job-number>, <current>, <status>, <job-name>
where the fields shall be as follows:
<current>   The character '+' identifies the job that would be used as a default for the fg or bg utilities; this job can also be specified using the job_id "%+" or "%%".  The character '-' identifies the job that would become the default if the current default job were to exit; this job can also be specified using the job_id "%-".  For other jobs, this field is a <space>.  At most one job can be identified with '+' and at most one job can be identified with '-'.  If there is any suspended job, then the current job shall be a suspended job. If there are at least two suspended jobs, then the previous job also shall be a suspended job.
<job-number> A number that can be used to identify the process group to the wait, fg, bg, and kill utilities. Using these utilities, the job can be identified by prefixing the job number with '%'.
<status>    Unspecified.
<job-name>  Unspecified.
When the shell notifies the user a job has been completed, it may remove the job's process ID from the list of those known in the current shell execution environment; see Section 2.9.3.1, Examples. Asynchronous notification shall not be enabled by default.
-C    (Uppercase C.) Prevent existing files from being overwritten by the shell's '>' redirection operator (see Section 2.7.2, Redirecting Output); the ">|" redirection operator shall override this noclobber option for an individual file.
-e    When this option is on, when any command fails (for any of the reasons listed in Section 2.8.1, Consequences of Shell Errors or by returning an exit status greater than zero), the shell immediately shall exit, as if by executing the exit special built-in utility with no arguments, with the following exceptions:
1. The failure of any individual command in a multi-command pipeline shall not cause the shell to exit. Only the failure of the pipeline itself shall be considered.
2. The -e setting shall be ignored when executing the compound list following the while, until, if, or elif reserved word, a pipeline beginning with the !  reserved word, or any command of an AND-OR list other than the last.
3. If the exit status of a compound command other than a subshell command was the result of a failure while -e was being ignored, then -e shall not apply to this command.
This requirement applies to the shell environment and each subshell environment separately. For example, in:
set -e; (false; echo one) | cat; echo two
the false command causes the subshell to exit without executing echo one; however, echo two is executed because the exit status of the pipeline (false; echo one) | cat is zero.
-f    The shell shall disable pathname expansion.
-h    Locate and remember utilities invoked by functions as those functions are defined (the utilities are normally located when the function is executed).
-m    This option shall be supported if the implementation supports the User Portability Utilities option. All jobs shall be run in their own process groups. Immediately before the shell issues a prompt after completion of the background job, a message reporting the exit status of the background job shall be written to standard error. If a foreground job stops, the shell shall write a message to standard error to that effect, formatted as described by the jobs utility. In addition, if a job changes status other than exiting (for example, if it stops for input or output or is stopped by a SIGSTOP signal), the shell shall write a similar message immediately prior to writing the next prompt. This option is enabled by default for interactive shells.
-n    The shell shall read commands but does not execute them; this can be used to check for shell script syntax errors. An interactive shell may ignore this option.
-o    Write the current settings of the options to standard output in an unspecified format.
+o    Write the current option settings to standard output in a format that is suitable for reinput to the shell as commands that achieve the same options settings.