How can I copy a (big) directory over another changing only the files that differ?
Solution 1
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/
Solution 2
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
Solution 3
You can diff the 2 directories.
diff -r dir1 dir2
it will show you the list of files that are differnet
Solution 4
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.
Solution 5
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/*
Related videos on Youtube
Shadarath
Updated on September 17, 2022Comments
-
Shadarath over 1 year
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).
-
Jjames over 13 yearsIs
rsync
an option? -
Shadarath over 13 yearsIt is, but I don't know much about rsync.
-
-
Tog over 13 years+1 I get so used to synching across machines I forget the elegant ways.
-
Shadarath over 13 yearsdoes not work for me :(
-
Keith over 13 yearsThat's actually good gnu cp. ;-)
-
Jean-François Beauchamp over 11 yearsOn 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.
-
srcspider about 11 yearsDoes 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 about 11 years@new123456
-T
is not documented in--help
for me can you paste the description in the answer please. :) -
new123456 about 11 years@srcspider You must not be using GNU cp, then - on my machine,
cp
from coreutils 8.13 mentions the -T flag in the help. The online documentation describing what exactly -T does is on GNU's site. -
srcspider about 11 years@new123456 Yeah it seems the windows git bash version doesn't have it; I'm on a unix box now and it's in the docs. Is there some other command that will copy the files from A to B and overwrite?
-
Arvind K. about 8 yearsBEWARE of this command. It will delete all the files which wont differ. I ran it and LOST almost everything!!
-
Tog almost 8 years@Arvind I don't know what command you used that caused you to lose your data but it wasn't rsync -tr. Read the man page.