Create path hirarchy of source path automatically in destination

Before it was only possible to backup root directories (depth one, eg.
/etc, /var, /usr, …). For example consider the following truncated toy
configuration for rsync:

    [general]
    mountpoint = /media/
    backupdir = backup
    [source]
    include = /foo/bar
    include = /etc

We assume you have prepared the existent but empty base-directory
/media/backup/ at your destination, then against the expectation, the
following error rises:

    rsync: mkdir "/media/backup/foo/bar/" failed: No such file or directory (2)

The reason is that rsync will take the files from the folder /foo/bar/
and tries to put them into the ulitmate – and therefore existent –
destination /media/backup/foo/bar. This is not what you would expect,
since the prepared directory /media/backup exists and the application
should create the rest itself.

This Merge Request adds a little script which creates the required
directories in the destination before running rsync. It assumes that
the base-directory already exists, so that not too much directories
are created automatically (could be a mess if you accidentally type the
wrong path)
This commit is contained in:
Fabian Raab 2018-08-07 20:04:13 +02:00 committed by Jerome Charaoui
parent 7c8ba1e71e
commit a2646868b3

View File

@ -750,6 +750,30 @@ function prepare_storage {
section="`basename $SECTION`"
# create $SECTION directories, but not $backupdir
if [ "$dest" == "local" ]; then
if [ -d "$backupdir" ]; then
mkdir --parents $backupdir/$SECTION
else
fatal "The destination $backupdir does not exist"
exit 1
fi
else
(
$ssh_cmd <<EOF
##### BEGIN REMOTE SCRIPT #####
if [ -d "$backupdir" ]; then
mkdir --parents $backupdir/$SECTION
else
echo "FATAL: The destination $backupdir does not exist"
exit 1
fi
##### END REMOTE SCRIPT #######
EOF
) | (while read a; do passthru $a; done)
fi
if [ "$format" == "short" ]; then
suffix="$section.0"