From: leledumbo <lel...@ya...> - 2009-06-26 07:28:47
|
If I have 2 dir (let's say A and B) that have common subdir (call it C), when I run: mv -f A/C . && mv -f B/C . it should end up merging everything under C from both A and B into single C dir, right? But I got "cannot move ... permission denied" instead. -- View this message in context: http://www.nabble.com/mv--f-can%27t-overwrite-tp24216118p24216118.html Sent from the MinGW - User mailing list archive at Nabble.com. |
From: Earnie B. <ea...@us...> - 2009-06-26 18:06:30
|
Quoting leledumbo <lel...@ya...>: > > If I have 2 dir (let's say A and B) that have common subdir (call it C), when > I run: > > mv -f A/C . && mv -f B/C . > > it should end up merging everything under C from both A and B into single C > dir, right? But I got "cannot move ... permission denied" instead. > You've said to move a directory A/C and a directory B/C to the current working directory. I don't think that is want you meant to do. The ``permission denied'' will be exhibited if any files are open in A/C or B/C. If you want to move the files in A/C and B/C to a common directory you need to do the following: mv -f A/C/* B/C/* D/C/ But if any files are open in A/C or B/C you will see ``permission denied''. And if there are like names in A/C and B/C the files in B/C will persist. -- Earnie |
From: Keith M. <kei...@us...> - 2009-06-26 18:18:58
|
On Friday 26 June 2009 08:28:45 leledumbo wrote: > If I have 2 dir (let's say A and B) that have common subdir (call > it C), when I run: > > mv -f A/C . && mv -f B/C . > > it should end up merging everything under C from both A and B into > single C dir, right? Wrong, actually. > But I got "cannot move ... permission denied" instead. You've elided information here, which you should have left visible; we can only guess that what it actually said was: mv: cannot move `B/C' to `./C': permission denied I might have preferred to see `directory not empty' as the reason for failure, (as I do, if I perform the same invalid command sequence on my GNU/Linux box), but nonetheless, failure is exactly what you should have expected; once you have successfully moved A/C, (which presumably was not empty), to ./C, even with `-f', mv is not then permitted to simply replace this ./C, by subsequently moving B/C into its place. The traditional Unix method for merging two directory hierarchies, as you are apparently trying to achieve, would be something like: $ ( cd A; tar cf - C ) | tar xf - ; rm -rf A/C $ ( cd B; tar cf - C ) | tar xf - ; rm -rf B/C With more modern systems, where cp supports the `-p' and `-r' options, (as MSYS' cp does), you could also use (untested): $ mv -f A/C . && cp -prf B/C/* C && rm -rf B/C -- Regards, Keith. |
From: leledumbo <lel...@ya...> - 2009-06-29 05:03:39
|
> You've said to move a directory A/C and a directory B/C to the current > working directory. I don't think that is want you meant to do. Actually, it is. > The ``permission denied'' will be exhibited if any files are open in > A/C or B/C. But none of them is open. > You've elided information here, which you should have left visible; > we can only guess that what it actually said was: > > mv: cannot move `B/C' to `./C': permission denied Correct guess. Sorry, I didn't mean to, but I forgot to write it down. > With more modern systems, where cp supports the `-p' and `-r' > options, (as MSYS' cp does), you could also use (untested): > > $ mv -f A/C . && cp -prf B/C/* C && rm -rf B/C Aha! Good idea, I'll try it. -- View this message in context: http://www.nabble.com/mv--f-can%27t-overwrite-tp24216118p24248404.html Sent from the MinGW - User mailing list archive at Nabble.com. |
From: Keith M. <kei...@us...> - 2009-06-29 20:33:48
|
On Monday 29 June 2009 06:03:36 leledumbo wrote: > > You've said to move a directory A/C and a directory B/C to the > > current working directory. I don't think that is want you meant > > to do. > > Actually, it is. Really? You do astound me! However, if that *really* is what you want, this will get the job done: $ rm -rf ./C && mv A/C . && rm -rf ./C && mv B/C . but then why go to this length? You might just as well: $ rm -rf A/C ./C && mv B/C . which is a simpler way to achieve identically the same objective. Now, tell me again: is that *really* what you wanted to do? I think not, and that Earnie was quite right; you really wanted to *merge* the *content* of two existing directories into a common tree, while removing the originals in the process, which you might achieve with: $ rm -rf ./C && mv A/C ./C && mv B/C/* ./C However, this will still fail, if A/C and B/C have any similarly named subdirectory, (at any level in the hierarchy), which is not empty in the original A/C tree. > > With more modern systems, where cp supports the `-p' and `-r' > > options, (as MSYS' cp does), you could also use (untested): > > > > $ mv -f A/C . && cp -prf B/C/* C && rm -rf B/C > > Aha! Good idea, I'll try it. Do note that the `-f' option to `mv' is pretty much redundant here; in the command: $ mv -f src dest `-f' takes effect only if `dest' represents an existing *file* or *empty* directory, for which you lack write permission, but you do have permission to `chmod' it, to make it writeable, so that it may be unlinked; a *non-empty* directory can never be unlinked, even if you do have write permission, unless you first recursively remove all of its content, (which `mv' will never do for you). -- Regards, Keith. |