cytopia / linux-timemachine

Rsync-based OSX-like time machine for Linux, MacOS and BSD for atomic and resumable local and remote backups
MIT License
780 stars 63 forks source link

Errors from path arguments with spaces #82

Open jbrad3 opened 1 year ago

jbrad3 commented 1 year ago

In v1.3.2, I have found that errors are encountered from

Here is the behavior in Ubunty 20.04.6: $ timemachine -d remotehost:/home/user/spaced\ dir /home/user/backup 2023-05-29 16:51:34 timemachine: [DEBUG] $ ssh -oStrictHostKeyChecking=no -oLogLevel=QUIET -q remotehost test -d '/home/user/spaced dir' bash: line 0: test: /home/user/spaced: binary operator expected

$ timemachine -d /home/user/data /home/user/backup -- --exclude-from=/home/user/spaced\ dir/exclude.txt 2023-05-29 17:02:45 timemachine: [INFO] $ rsync --exclude-from=/home/user/spaced dir/exclude.txt '/home/user/data' '/home/user/backup/.inprogress' rsync: failed to open exclude file /home/user/spaced: No such file or directory (2) rsync error: error in file IO (code 11) at exclude.c(1496) [client=3.1.3] 2023-05-29 17:02:45 timemachine: [ERROR] timemachine Backup has failed

These changes (in two cases each) and one addition resolve these issues: - ssh_cmd="test -d ${dir_part}" + ssh_cmd="test -d \"${dir_part}\""

- cmd="ssh ${SSH_ARGS} ${ssh_part} ${ssh_cmd}" + cmd="ssh ${SSH_ARGS} ${ssh_part} \"${ssh_cmd}\""

+# Path escape the rsync options in case there are any spaces in them +RSYNC_OPTS=$( escape_path "${@}" ) +

- logmsg "\$ rsync $* $( escape_path "${SRC}" ) $( escape_path "${DEST}/${BACKUP_INPROGRESS}" )" + logmsg "\$ rsync ${RSYNC_OPTS} $( escape_path "${SRC}" ) $( escape_path "${DEST}/${BACKUP_INPROGRESS}" )"

- $* \ + ${RSYNC_OPTS} \