I have two directories images and images2 with this structure in Linux:
/images/ad
/images/fe
/images/foo
… and other 4000 folders
and the other is like:
/images2/ad
/images2/fe
/images2/foo
… and other 4000 folders
Each of these folders contain images and the directories' names under images and images2 are exactly the same, however their content is different. Then I want to know how I can copy-merge the images of /images2/ad into images/ad, the images of /images2/foo into images/foo and so on with all the 4000 folders..
Best Answer
This is a job for rsync. There's no benefit to doing this manually with a shell loop unless you want to move the file rather than copy them.
In your case:
(Note trailing slash on
images2
, otherwise it would copy to/images/images2
.)If images with the same name exist in both directories, the command above will overwrite
/images/SOMEPATH/SOMEFILE
with/images2/SOMEPATH/SOMEFILE
. If you want to replace only older files, add the option-u
. If you want to always keep the version in/images
, add the option--ignore-existing
.If you want to move the files from
/images2
, with rsync, you can pass the option--remove-source-files
. Then rsync copies all the files in turn, and removes each file when it's done. This is a lot slower than moving if the source and destination directories are on the same filesystem.