Hi,

Bob McGowan wrote:
> One question, what I would like to see is a duplicated directory/file
> hierachy on the destination.  I have lists of file names in groups just
> short of 25G,  but I can't find an easy way to send the file names to
> any of the programs and have them maintain the hierarchy.  They just
> dump all the files in the root of the destination.
>
> I did manage this for a few files with 'xorriso -update_r' option used
> once per file name and with the full destination path and file name
> listed:
>
>    xorriso -update_r /home/me/topdir/file /topdir/file ...
>
> But doing this for thousands of files doesn't seem like it is a
> manageable or robust solution.

It's not unfeasible.
man xorriso says:

  -options_from_file fileaddress
         Read quoted input from fileaddress and execute  it  like  dialog
         lines.   Empty  lines  and  lines  which begin by # are ignored.
         Normally one line should hold one xorriso command  and  all  its
         parameters.    Nevertheless  lines  may  be  concatenated  by  a
         trailing backslash.
         See also section "Command processing", paragraph "Quoted input".

That paragraph says:

  Quoted input converts whitespace-separated text into words.  The double
  quotation mark " and the single quotation mark ' can be used to enclose
  whitespace  and  make  it part of words (e.g. of file names). Each mark
  type can enclose the marks of the other type. A  trailing  backslash  \
  outside quotations or an open quotation cause the next input line to be
  appended.
  [...]

So you may quote whitespace like blanks, tabs or newline characters like
in the shell:

  -update_r "/home/me/topdir/filename with blanks" "/topdir/filename with 
blanks"
  ...more.update_r.commands...

Since you seem not to strive for adding sessions to already existing
ISO 9660 filesystems, you may also use -map or -map_single :

  -map "/home/me/topdir/filename with blanks" "/topdir/filename with blanks"
  ...more.map.commands...

about which the man page says:

  -map disk_path iso_rr_path
         Insert file object disk_path into the ISO image as  iso_rr_path.
         If  disk_path is a directory then its whole sub tree is inserted
         into the ISO image.

  -map_single disk_path iso_rr_path
         Like -map, but if disk_path is a directory then its sub tree  is
         not inserted.

I.e. these two commands do not ponder whether the iso_rr_path already
leads to an up-to-date version of the file in the ISO filesystem, but
rather copy disk_path to iso_rr_path unconditionally.

You would write all intended xorriso commands into a disk file, e.g.
  /home/me/xorriso_commands
and then let xorriso process it by command -options_from_file like in:

  xorriso \
    -for_backup \
    -outdev /dev/sr0 \
    -blank as_needed \
    -options_from_file /home/me/xorriso_commands \
    -commit -toc -check_md5 FAILURE -- -eject all

-----------------------------------------------------------------------

Another approach is to create a file with a list of pathspecs which are
a concept from program mkisofs:

  -path_list disk_path
         Like -add but read the parameter words from  file  disk_path  or
         standard  input  if  disk_path  is  "-".   The list must contain
         exactly one pathspec or disk_path pattern per line.

The command -add inserts files into the emerging ISO image in a way that
is usual with mkisofs:

  -add pathspec [...] | disk_path [***]
         Insert  the  given files or directory trees from filesystem into
         the ISO image.
         If -pathspecs is  set  to  "on"  or  "as_mkisofs"  then  pattern
         expansion  is  always  disabled  and character '=' has a special
         meaning. It separates the ISO image path from the disk path:
         iso_rr_path=disk_path
         Character '=' in the iso_rr_path must be escaped by '\' (i.e. as
         "\=").
         With -pathspecs "on", the character '\' must not be escaped. The
         character '=' in the disk_path must not be escaped.
         With -pathspecs "as_mkisofs", all characters '\' must be escaped
         in both, iso_rr_path and disk_path. The character '=' may or may
         not be escaped in the disk_path.
         If iso_rr_path does not begin with '/' then  -cd  is  prepended.
         If disk_path does not begin with '/' then -cdx is prepended.
         If  no  '='  is given then the word is used as both, iso_rr_path
         and disk path.  If in this case the word does not begin with '/'
         then  -cdx is prepended to the disk_path and -cd is prepended to
         the iso_rr_path.
         ...

  -pathspecs "on"|"off"|"as_mkisofs"
         Control parameter interpretation with xorriso actions  -add  and
         -path_list.
         Mode "as_mkisofs" enables pathspecs of the form
           iso_rr_path=disk_path
         like with program mkisofs -graft-points.
         ...

With this approach you would write lines like

  /topdir/file=/home/me/topdir/file
  /topdir/filename with blanks=/home/me/topdir/filename with blanks
  /topdir/filename with \= in it=/home/me/topdir/filename with = in it

into a disk file, e.g.
  /home/me/xorriso_pathspecs
and perform in -path_list xorriso:

  xorriso \
    -for_backup \
    -outdev /dev/sr0 \
    -blank as_needed \
    -pathspecs as_mkisofs \
    -path_list /home/me/xorriso_pathspecs \
    -commit -toc -check_md5 FAILURE -- -eject all

-----------------------------------------------------------------------
How i handle my larger backups:

I assume that you want to split a larger collection of files into
groups which fit on the BD media.
Nearly half a life ago, my own endeavor with ISO 9660 and optical media
began with creating a tool which does this splitting automatically:

  http://scdbackup.webframe.org/main_eng.html
  http://scdbackup.webframe.org/examples.html

BD is configured and handled by the DVD configuration and commands of
scdbackup.
Once:

  ./CONFIGURE_DVD

With each backup, you'd do something like:

  sdvdbackup /topdir=/home/me/topdir -not /home/me/topdir/temp_files

Back then there was only mkisofs for producing ISO 9660. So sdvdbackup
uses its pathspecs notation for defining the mapping from disk to BD.
Of course i meanwhile use xorriso for the roles of cdrecord, growisofs
and mkisofs.

I'm still backing up multi-media file collections by help of sdvdbackup.
Backups which fill dozens of media might become lengthy. So there is also
the opportunity to perform incremental backups:

  http://scdbackup.webframe.org/examples.html#incremental

-----------------------------------------------------------------------

Have a nice day :)

Thomas

Reply via email to