Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I have directory a and directory b. They are big. b is almost identical to a. "almost" means that 4-5 files differ, and I don't know which they are. I want to copy b over a, but only the files that differ. i'm in bash.

(no, I can't simply delete a and replace it with b, because 1) a is version-controlled 2) a full copy (or a mv) would take too much. I want to copy only the files that differ).

share|improve this question
    
Is rsync an option? –  Bobby Feb 3 '11 at 11:43
    
It is, but I don't know much about rsync. –  janesconference Feb 3 '11 at 11:44
add comment

5 Answers

up vote 9 down vote accepted

You can use rsync to do this, the command I use is rsync -tr "folder to copy from" "folder to copy to"

e.g. rsync -tr /home/me/stuff/* /home/me/otherstuff/

share|improve this answer
add comment

It is also possible to do this with good old cp:

Thanks to srcspider for reminding me to use -T!

cp -ruT old-dir new-dir

share|improve this answer
    
+1 I get so used to synching across machines I forget the elegant ways. –  Tog Feb 3 '11 at 12:11
    
does not work for me :( –  janesconference Feb 3 '11 at 12:51
    
That's actually good gnu cp. ;-) –  Keith Feb 3 '11 at 19:58
    
On OS X, the -u option does not exist. I simply used cp -r old-dir new-dir, since I did not have to compare dates. –  Jean-François Beauchamp Nov 12 '12 at 2:11
    
Does not work. I am not sure if this is some name convention but cp -ru folder-A folder-B will simply copy folder-A inside folder-B not copy contents of A inside B and overwrite, which would be the desired effect. –  srcspider Mar 21 '13 at 16:16
show 4 more comments

Another good option is Unison (http://www.cis.upenn.edu/~bcpierce/unison/), particularly if there isn't really a "source" and a "destination". Each directory is a root and Unison syncs them and keeps metadata for future syncs. It offers both a command-line and a GUI option that can easily be scheduled via cron as well.

I use it to make a backup of my Dropbox to my local NAS appliance which can't run a Dropbox client.

share|improve this answer
add comment

It CAN be done with good ol' cp, though with a slightly different format than stated above. Here's how I did it:

cp -ru --target-directory="destination_path" source_path/*
share|improve this answer
add comment

You can diff the 2 directories.

diff -r dir1 dir2

it will show you the list of files that are differnet

share|improve this answer
    
True, but it doesn't copy them. –  Chenmunka Jun 18 at 17:53
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.