Merge one folder onto another but keep diff (non-existing) files

Clash Royale CLAN TAG#URR8PPP up vote
1
down vote
favorite
Suppose I have the following structure:
Folder-A
File-1
File-2
File-4
Folder-A-1
File-5
File-6
Folder-A-2
File-7
Folder-B
File-1
File-2
File-3
Folder-A-1
File-5
I want to copy Folder-A onto / on top of Folder-B so that, logically, the result is this:
Folder-B
File-1 *
File-2 *
File-3
File-4 +
Folder-A-1
File-5 *
File-6 +
Folder-A-2 +
File-7 +
Where * is an overwrite and + is an addition.
In other words, recursively, if the file (or folder) exists in the same path, overwrite it, and if it's new, add it.
How would I do this?
command-line cp merge
add a comment |Â
up vote
1
down vote
favorite
Suppose I have the following structure:
Folder-A
File-1
File-2
File-4
Folder-A-1
File-5
File-6
Folder-A-2
File-7
Folder-B
File-1
File-2
File-3
Folder-A-1
File-5
I want to copy Folder-A onto / on top of Folder-B so that, logically, the result is this:
Folder-B
File-1 *
File-2 *
File-3
File-4 +
Folder-A-1
File-5 *
File-6 +
Folder-A-2 +
File-7 +
Where * is an overwrite and + is an addition.
In other words, recursively, if the file (or folder) exists in the same path, overwrite it, and if it's new, add it.
How would I do this?
command-line cp merge
add a comment |Â
up vote
1
down vote
favorite
up vote
1
down vote
favorite
Suppose I have the following structure:
Folder-A
File-1
File-2
File-4
Folder-A-1
File-5
File-6
Folder-A-2
File-7
Folder-B
File-1
File-2
File-3
Folder-A-1
File-5
I want to copy Folder-A onto / on top of Folder-B so that, logically, the result is this:
Folder-B
File-1 *
File-2 *
File-3
File-4 +
Folder-A-1
File-5 *
File-6 +
Folder-A-2 +
File-7 +
Where * is an overwrite and + is an addition.
In other words, recursively, if the file (or folder) exists in the same path, overwrite it, and if it's new, add it.
How would I do this?
command-line cp merge
Suppose I have the following structure:
Folder-A
File-1
File-2
File-4
Folder-A-1
File-5
File-6
Folder-A-2
File-7
Folder-B
File-1
File-2
File-3
Folder-A-1
File-5
I want to copy Folder-A onto / on top of Folder-B so that, logically, the result is this:
Folder-B
File-1 *
File-2 *
File-3
File-4 +
Folder-A-1
File-5 *
File-6 +
Folder-A-2 +
File-7 +
Where * is an overwrite and + is an addition.
In other words, recursively, if the file (or folder) exists in the same path, overwrite it, and if it's new, add it.
How would I do this?
command-line cp merge
asked Apr 28 at 16:24
Oliver Williams
1337
1337
add a comment |Â
add a comment |Â
1 Answer
1
active
oldest
votes
up vote
1
down vote
That's the default behavior of cp. So all you need to do is a regular recursive cp:
cp -r Folder-A/* Folder-B/
To demonstrate:
$ tree
.
âÂÂâÂÂâ Folder-A
âÂÂààâÂÂâÂÂâ File-1
âÂÂààâÂÂâÂÂâ File-2
âÂÂààâÂÂâÂÂâ File-4
âÂÂààâÂÂâÂÂâ Folder-A-1
âÂÂààâÂÂààâÂÂâÂÂâ File-5
âÂÂààâÂÂààâÂÂâÂÂâ File-6
âÂÂààâÂÂâÂÂâ Folder-A-2
âÂÂààâÂÂâÂÂâ File-7
âÂÂâÂÂâ Folder-B
âÂÂâÂÂâ File-1
âÂÂâÂÂâ File-2
âÂÂâÂÂâ File-3
âÂÂâÂÂâ Folder-A-1
âÂÂâÂÂâ File-5
$ cp -r Folder-A/* Folder-B
$ tree
.
âÂÂâÂÂâ Folder-A
âÂÂààâÂÂâÂÂâ File-1
âÂÂààâÂÂâÂÂâ File-2
âÂÂààâÂÂâÂÂâ File-4
âÂÂààâÂÂâÂÂâ Folder-A-1
âÂÂààâÂÂààâÂÂâÂÂâ File-5
âÂÂààâÂÂààâÂÂâÂÂâ File-6
âÂÂààâÂÂâÂÂâ Folder-A-2
âÂÂààâÂÂâÂÂâ File-7
âÂÂâÂÂâ Folder-B
âÂÂâÂÂâ File-1
âÂÂâÂÂâ File-2
âÂÂâÂÂâ File-3
âÂÂâÂÂâ File-4
âÂÂâÂÂâ Folder-A-1
âÂÂààâÂÂâÂÂâ File-5
âÂÂààâÂÂâÂÂâ File-6
âÂÂâÂÂâ Folder-A-2
âÂÂâÂÂâ File-7
add a comment |Â
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
That's the default behavior of cp. So all you need to do is a regular recursive cp:
cp -r Folder-A/* Folder-B/
To demonstrate:
$ tree
.
âÂÂâÂÂâ Folder-A
âÂÂààâÂÂâÂÂâ File-1
âÂÂààâÂÂâÂÂâ File-2
âÂÂààâÂÂâÂÂâ File-4
âÂÂààâÂÂâÂÂâ Folder-A-1
âÂÂààâÂÂààâÂÂâÂÂâ File-5
âÂÂààâÂÂààâÂÂâÂÂâ File-6
âÂÂààâÂÂâÂÂâ Folder-A-2
âÂÂààâÂÂâÂÂâ File-7
âÂÂâÂÂâ Folder-B
âÂÂâÂÂâ File-1
âÂÂâÂÂâ File-2
âÂÂâÂÂâ File-3
âÂÂâÂÂâ Folder-A-1
âÂÂâÂÂâ File-5
$ cp -r Folder-A/* Folder-B
$ tree
.
âÂÂâÂÂâ Folder-A
âÂÂààâÂÂâÂÂâ File-1
âÂÂààâÂÂâÂÂâ File-2
âÂÂààâÂÂâÂÂâ File-4
âÂÂààâÂÂâÂÂâ Folder-A-1
âÂÂààâÂÂààâÂÂâÂÂâ File-5
âÂÂààâÂÂààâÂÂâÂÂâ File-6
âÂÂààâÂÂâÂÂâ Folder-A-2
âÂÂààâÂÂâÂÂâ File-7
âÂÂâÂÂâ Folder-B
âÂÂâÂÂâ File-1
âÂÂâÂÂâ File-2
âÂÂâÂÂâ File-3
âÂÂâÂÂâ File-4
âÂÂâÂÂâ Folder-A-1
âÂÂààâÂÂâÂÂâ File-5
âÂÂààâÂÂâÂÂâ File-6
âÂÂâÂÂâ Folder-A-2
âÂÂâÂÂâ File-7
add a comment |Â
up vote
1
down vote
That's the default behavior of cp. So all you need to do is a regular recursive cp:
cp -r Folder-A/* Folder-B/
To demonstrate:
$ tree
.
âÂÂâÂÂâ Folder-A
âÂÂààâÂÂâÂÂâ File-1
âÂÂààâÂÂâÂÂâ File-2
âÂÂààâÂÂâÂÂâ File-4
âÂÂààâÂÂâÂÂâ Folder-A-1
âÂÂààâÂÂààâÂÂâÂÂâ File-5
âÂÂààâÂÂààâÂÂâÂÂâ File-6
âÂÂààâÂÂâÂÂâ Folder-A-2
âÂÂààâÂÂâÂÂâ File-7
âÂÂâÂÂâ Folder-B
âÂÂâÂÂâ File-1
âÂÂâÂÂâ File-2
âÂÂâÂÂâ File-3
âÂÂâÂÂâ Folder-A-1
âÂÂâÂÂâ File-5
$ cp -r Folder-A/* Folder-B
$ tree
.
âÂÂâÂÂâ Folder-A
âÂÂààâÂÂâÂÂâ File-1
âÂÂààâÂÂâÂÂâ File-2
âÂÂààâÂÂâÂÂâ File-4
âÂÂààâÂÂâÂÂâ Folder-A-1
âÂÂààâÂÂààâÂÂâÂÂâ File-5
âÂÂààâÂÂààâÂÂâÂÂâ File-6
âÂÂààâÂÂâÂÂâ Folder-A-2
âÂÂààâÂÂâÂÂâ File-7
âÂÂâÂÂâ Folder-B
âÂÂâÂÂâ File-1
âÂÂâÂÂâ File-2
âÂÂâÂÂâ File-3
âÂÂâÂÂâ File-4
âÂÂâÂÂâ Folder-A-1
âÂÂààâÂÂâÂÂâ File-5
âÂÂààâÂÂâÂÂâ File-6
âÂÂâÂÂâ Folder-A-2
âÂÂâÂÂâ File-7
add a comment |Â
up vote
1
down vote
up vote
1
down vote
That's the default behavior of cp. So all you need to do is a regular recursive cp:
cp -r Folder-A/* Folder-B/
To demonstrate:
$ tree
.
âÂÂâÂÂâ Folder-A
âÂÂààâÂÂâÂÂâ File-1
âÂÂààâÂÂâÂÂâ File-2
âÂÂààâÂÂâÂÂâ File-4
âÂÂààâÂÂâÂÂâ Folder-A-1
âÂÂààâÂÂààâÂÂâÂÂâ File-5
âÂÂààâÂÂààâÂÂâÂÂâ File-6
âÂÂààâÂÂâÂÂâ Folder-A-2
âÂÂààâÂÂâÂÂâ File-7
âÂÂâÂÂâ Folder-B
âÂÂâÂÂâ File-1
âÂÂâÂÂâ File-2
âÂÂâÂÂâ File-3
âÂÂâÂÂâ Folder-A-1
âÂÂâÂÂâ File-5
$ cp -r Folder-A/* Folder-B
$ tree
.
âÂÂâÂÂâ Folder-A
âÂÂààâÂÂâÂÂâ File-1
âÂÂààâÂÂâÂÂâ File-2
âÂÂààâÂÂâÂÂâ File-4
âÂÂààâÂÂâÂÂâ Folder-A-1
âÂÂààâÂÂààâÂÂâÂÂâ File-5
âÂÂààâÂÂààâÂÂâÂÂâ File-6
âÂÂààâÂÂâÂÂâ Folder-A-2
âÂÂààâÂÂâÂÂâ File-7
âÂÂâÂÂâ Folder-B
âÂÂâÂÂâ File-1
âÂÂâÂÂâ File-2
âÂÂâÂÂâ File-3
âÂÂâÂÂâ File-4
âÂÂâÂÂâ Folder-A-1
âÂÂààâÂÂâÂÂâ File-5
âÂÂààâÂÂâÂÂâ File-6
âÂÂâÂÂâ Folder-A-2
âÂÂâÂÂâ File-7
That's the default behavior of cp. So all you need to do is a regular recursive cp:
cp -r Folder-A/* Folder-B/
To demonstrate:
$ tree
.
âÂÂâÂÂâ Folder-A
âÂÂààâÂÂâÂÂâ File-1
âÂÂààâÂÂâÂÂâ File-2
âÂÂààâÂÂâÂÂâ File-4
âÂÂààâÂÂâÂÂâ Folder-A-1
âÂÂààâÂÂààâÂÂâÂÂâ File-5
âÂÂààâÂÂààâÂÂâÂÂâ File-6
âÂÂààâÂÂâÂÂâ Folder-A-2
âÂÂààâÂÂâÂÂâ File-7
âÂÂâÂÂâ Folder-B
âÂÂâÂÂâ File-1
âÂÂâÂÂâ File-2
âÂÂâÂÂâ File-3
âÂÂâÂÂâ Folder-A-1
âÂÂâÂÂâ File-5
$ cp -r Folder-A/* Folder-B
$ tree
.
âÂÂâÂÂâ Folder-A
âÂÂààâÂÂâÂÂâ File-1
âÂÂààâÂÂâÂÂâ File-2
âÂÂààâÂÂâÂÂâ File-4
âÂÂààâÂÂâÂÂâ Folder-A-1
âÂÂààâÂÂààâÂÂâÂÂâ File-5
âÂÂààâÂÂààâÂÂâÂÂâ File-6
âÂÂààâÂÂâÂÂâ Folder-A-2
âÂÂààâÂÂâÂÂâ File-7
âÂÂâÂÂâ Folder-B
âÂÂâÂÂâ File-1
âÂÂâÂÂâ File-2
âÂÂâÂÂâ File-3
âÂÂâÂÂâ File-4
âÂÂâÂÂâ Folder-A-1
âÂÂààâÂÂâÂÂâ File-5
âÂÂààâÂÂâÂÂâ File-6
âÂÂâÂÂâ Folder-A-2
âÂÂâÂÂâ File-7
answered Apr 28 at 23:37
terdonâ¦
61.8k12125204
61.8k12125204
add a comment |Â
add a comment |Â
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1029305%2fmerge-one-folder-onto-another-but-keep-diff-non-existing-files%23new-answer', 'question_page');
);
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password