LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Software (https://www.linuxquestions.org/questions/linux-software-2/)
-   -   cp: cannot overwrite directory with non-directory (https://www.linuxquestions.org/questions/linux-software-2/cp-cannot-overwrite-directory-with-non-directory-4175433255/)

average_user 10-20-2012 01:37 PM

cp: cannot overwrite directory with non-directory
 
Slackware 13.37 x64, cp (GNU coreutils) 8.11

The error as in subject occurred to me when I tried to upgrade Mediawiki on the remote Ubuntu server. I don't have access to this server at the moment but the flow that led me the error was as follows:

Code:

mkdir ~/symlinks
cd ~/symlinks
mkdir ~/symlinks-target/
mkdir dir
mkdir dir/symlink
ln -s ~/symlinks-target/ symlink
cp -r symlink dir/

In this situation what's the easiest way to replace directories in 'dir' with symlinks? In there a command for that or it's necessary to write a script that will traverse the entire source directory, and if there will be a directory with the same name in the output directory it will rm it and copy a symlink after that?

FrankP 10-20-2012 03:18 PM

The error occurs, in your example, because when you copy the symlink called 'symlink' into the directory called 'dir', there is already an object named 'symlink' residing there, although it is a directory! Understanding the situation was made harder by the rather confusing names!

If you try this:

cd ~/symlinks
rmdir dir/symlink
cp -r symlink dir/

.. then you should find in 'dir' a new copy of the symlink called 'symlink' pointing to the directory ~/symlinks-target (which should work as long as the link was created with an absolute path not a relative one).

Will this accomplish what you want?

average_user 10-20-2012 03:47 PM

Yes, it will, and I know it:

Quote:

if there will be a directory with the same name in the output directory it will rm it and copy a symlink after that?
But what if there are multiple directories I need to copy, is there some cp switch that could be used or maybe someone has already written a script that could take care of this and possible pitfalls?

FrankP 10-20-2012 04:15 PM

Ah, sorry, my mistake -- I missed the part of your OP that you just quoted.

So you need to detect when there is already a directory there, if so remove it, and replace with a symlink of the same name to somewhere else? Someone may come up with some really nifty way of doing that with a combo of find and xargs or something, but for safety yes I would have thought a script would be needed. Because, as you say, of the "pitfalls".

You might be able to work around it by making sure all the objects you are replacing are always symlinks, and never actual directories. This could work for keeping a set of files up-to-date when only some are superseded on each update, if that's your situation for example.

Rascal7 05-24-2018 06:14 AM

mv: cannot overwrite non-directory
 
Hi, I am trying to transfer some test files older than a specific date to another directory. I get the same error when I try to run my script.
find /INTER/f/d/o/ -name 'test*.txt' -mtime +190 -type f -exec mv /ARCHIVE/f/d/o/ {} \;


mv: cannot overwrite non-directory ./test1.txt with directory /ARCHIVE/f/d/o
mv: cannot overwrite non-directory ./test2.txt with directory /ARCHIVE/f/d/o
mv: cannot overwrite non-directory ./test3.txt with directory /ARCHIVE/f/d/o
mv: cannot overwrite non-directory ./test4.txt with directory /ARCHIVE/f/d/o

Can someone please give me any suggestions on what to do. I have been changing this script multiple times with no success and searching the web. Thanks

ondoho 05-26-2018 01:27 AM

please open a dedicated thread and take the time and effort to formulate a full problem description.
the first link in my signature might help.
please use code tags for adding code to your post.


All times are GMT -5. The time now is 07:11 AM.