How can I make cp replace a directory of the same name without removing the existing directory first? cp's default behaviour is to copy the source directory into the destination rather than replace it:

mkdir -p test/a
mkdir a
cp -a test/a a

a is now within a, it didn't replace a. How can I make cp replace directories? I want it to work the same way it does with files.

I could of course delete the target first, but I don't want to have to run more than one command :)


2 Answers 2


Use a dot . after a:

cp -a test/a/. a

It actually does not replace a as you though. It just copy test/a content to directory a.

  • I just tested it, although it might not replace the directory itself it does indeed work in the same manner as replacing the directory. Thanks :)
    – John Hunt
    Sep 1, 2014 at 13:11

Asterisk does the thing ;)

cp -a test/a/* a
  • This won't copy hidden files.
    – cuonglm
    Sep 1, 2014 at 13:00
  • 1
    @Gnouc , cool...you're the man again ;) , hey but that wasnt the main point of the OPs question ;)
    – beginer
    Sep 1, 2014 at 13:07

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .