Like SleighBoy said, rsync is definitively the tool you are looking for. Since it can be scary at first look, due to its many options, i'll suggest the most important to you, based on your needs. The basic syntax for local backups is:
rsync [OPTION..] SRC.. DST
--archive/-a option is used because it encloses some other common options like
--recursive and options to preserve file permissions.
One option the you don't have to use is
--delete because otherwise rsync will delete every file that is in the destination DST but is not in the sources SRT.
You probably want also the option
--relative/-R. It enables the use of relative paths. From the man page:
...this means that the full path names specified on the command line are sent to the server rather than just the last parts of the filenames. This is particularly useful when you want to send several different directories at the same time. For example, if you used this command:
rsync -av /foo/bar/baz.c /tmp/
... this would create a file named baz.c in /tmp/ . If instead you used
rsync -avR /foo/bar/baz.c /tmp/
then a file named /tmp/foo/bar/baz.c would be created — the full path name is preserved. To limit the amount of path information that is sent you can insert a dot and a slash into the source path, like this:
rsync -avR /foo/./bar/baz.c remote:/tmp/
That would create /tmp/bar/baz.c on the remote machine.
You also need the option:
One very handy option is
--dry-run that just simulates the transfer. You can use it to test your rsync commands.
The following options can be used to make the backup process verbose:
--stats --verbose --human-readable --progress
Summarizing, if you need to backup the folder
/home/user into the folder
/media/backup excluding the folders
/home/user/dir1/dir2 then you can use:
rsync -aRvh --exclude=/home/user/lib --exclude=/home/user/dir1/dir2 /home/user /media/backup
that will recreate the whole directory hierarchy of