Wednesday, October 19, 2016

rsync - keeping a Directory backup/copy up-to-date




I am trying to make a "backuper script" to keep a copy of a directory up to date on a USB-drive.
Basically every time I open my computer it run rsync -qrup dir/path backupKey/path. I want a copy instead of an archive backup so that the USB-drive is usable on the go



Now my issue is that anytime I change the structure of my bookshelf dir tree.
e.g: I move
~/bookshelf/studies/html to ~/bookshelf/studies/web-development/html



In my backupKey rsync will simply copy ~/bookshelf/studies/web-development/html(the new location) but not delete the original files at ~/bookshelf/studies/html.



This end-up creating duplicates that I have to manually delete.




Various things I've thought or read:




  • doing a full copy using cp, but this would be a lot more slow and resource intensive.

  • Using diff patch only work on text file (I saw advanced possibility but it getting complex and I don't understand fully)

  • Other binary diff checking tools like bsdiff jdiff don't seem to have a recursive option and I also don't know if it will work on various file type.

  • Looping trough all the file and delete the one that are at teh wrong place(duplicates) e.g: if file1 is in dirB but not in dirA delete it.




If someone as code examples of the loop. I need it to work with any file type digital books as much as notes and images. Sorry its been multiple hour I search online and can't find a solution that fits my idea.



Here is my script:



#!/bin/bash
## Create an backup script to keep my usb device.

## check if media Bookshlef is available
exec &>> /home/$USER/.local/scripts/bookSUpdater.log


echo "-----"
echo `date +%Y-%m-%d-%T`

if [ -e /media/$USER/Bookshelf ]; then
echo "Bookshelf usb key is available"

## use rsync to copy documents to usb dev.
echo "Starting transfer"

rsync -qrup /home/$USER/bookshelf/ /media/$USER/Bookshelf

## d= copy dir wihtout recursing, l= keep symlink: rsync -qdlup /home/$USER/bookshelf/* /media/$USER/Bookshelf
## try with binary difference tool
## make a loop to check if file are deleted. IF YES delete

echo "Operation succesful"
echo $? && exit 0

else
echo 'Error: Usb device unavailable aborting'
echo 'Usage: Usb device '\"'Bookshelf'\"' must be plugged in.'


echo $? && exit 2
fi


for same need i use



rsync -rt --delete /souce /dest



See man rsync
--delete is for delete extraneous files from dest dirs


No comments:

Post a Comment

11.10 - Can't boot from USB after installing Ubuntu

I bought a Samsung series 5 notebook and a very strange thing happened: I installed Ubuntu 11.10 from a usb pen drive but when I restarted (...