10

I have two directories that I'd like to keep in sync.

For backup purposes I'd like to run the rsync command such that it will copy new or changed files to a separate USB drive (or another directory) which I can review prior to completing the sync.

In the end I want:

  1. original directory
  2. backup directory (untouched by this command other than to look to see what's there)
  3. separate incremental directory that contains only the new/changed files.

Is this possible?

3
  • Would you accept an answer that doesn't create the intermediate directory but does allow speculative viewing of what would happen if the rsync did run? Commented Dec 12, 2018 at 21:18
  • Never mind, I've added an answer that should cover whatever your needs are. Commented Dec 12, 2018 at 21:34
  • I just wondered whether you would consider marking my Answer as correct? Some time has passed and it seems like no one else is willing or able to propose a better solution. Commented Dec 21, 2018 at 23:21

2 Answers 2

10

I believe a better answer is in https://serverfault.com/a/508272/173599. Here I quote the relevant command:

rsync -aHxv --compare-dest=folder2/ folder1/ folder3/ 

To compare folder1 with folder2 as destination, but copy instead in folder3.

2

If you only need to see which files will be affected, without seeing the differences between them, you can use the --dry-run option to rsync. Let's set up a sandpit for testing:

$ cd /tmp $ mkdir -p testing/{a,b} $ cd testing/ $ touch a/hello a/world $ ls a hello world $ rsync -rv --append-verify a/ b $ ls b hello world 

Now perform modifications to the contents of a:

$ echo 123 > a/hello $ touch a/abc 

Now use rsync ... --dry-run ... to see what would happen:

$ rsync -rv --append-verify --dry-run a/ b sending incremental file list abc hello sent 103 bytes received 22 bytes 250.00 bytes/sec total size is 4 speedup is 0.03 (DRY RUN) 

We can see no changes were actually made to b:

$ ls b hello world $ cat b/hello $ 

If you need to see the differences between the directories you can use diff:

$ /bin/diff -aurN a b diff -aurN a/hello b/hello --- a/hello 2018-12-13 08:16:23.376761456 +1100 +++ b/hello 2018-12-13 08:16:11.306761686 +1100 @@ -1 +0,0 @@ -123 

If b is on a remote box and you need to see the differences, you'll need to create a local copy of b and then you can diff.

3
  • 1
    That's helpful - I'll have to parse the output and run a second script based on that to copy it elsewhere. Wish there was a one-liner rsync command, but that may not exist. I'll keep it open for a bit for other answers to crop up. Commented Dec 13, 2018 at 0:30
  • 1
    @cryptarch Learned something useful, thks to line-by-line walk thru. Commented Dec 21, 2018 at 22:39
  • 2
    This is helpful, but I think it does not answer the question. The OP wanted to directly perform the operation not to gather the information needed to do it. I believe a better answer is serverfault.com/a/508272/173599. Commented Nov 29, 2019 at 19:02

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.