Copy a Directory from Command Line

By  on  

Copying a directory for the sake of backup is something I do often, especially when I'm trying to figure out why something isn't working when I use an external library.  I'll copy the directory structure as a backup, mess around with the original source until I find a solution, then restore the original and change my overall system code to bring in my revised version.

You can't just use cp to copy a directory structure -- you'll see cp: myDir is a directory (not copied).  You'll need to add a few additional flags to copy a directory structure:

cp -Rp source source_copy

The above command copies the directory recursively while keeping the same permissions!

Recent Features

Incredible Demos

  • By
    Send Email Notifications for Broken Images Using jQuery AJAX

    It's usually best to repair broken image paths as soon as possible because they can damage a website's credibility. And even worse is having a user tell you about it. Using jQuery and PHP, you can have your page automatically notify you of broken...

  • By
    Introducing MooTools ScrollSidebar

    How many times are you putting together a HTML navigation block or utility block of elements that you wish could be seen everywhere on a page? I've created a solution that will seamlessly allow you to do so: ScrollSidebar. ScrollSidebar allows you...

Discussion

  1. Why do you have the -s flag in there? Looking at the --help for cp, that’s the option to “make symbolic links instead of copying”, and according to Stack Overflow http://stackoverflow.com/questions/1240636 , that doesn’t even work recursively (with the -R flag). (Nor can I see why you would want to copy an entire directory recursively only for it to be populated with symlinks, especially “for the sake of backup”.) Typo?

    • EDIT: David has since corrected the error in question.

  2. Another great option that I somehow always forget to use is -a (archive), used like so:

    cp -a source source_copy

    It copies structure and permissions and also preserves symlinks.

  3. Just use rsync, faster and more options. )

  4. Good to know. But I agree with @John

  5. I prefer to use rsync for this purpose

    rsync -rav ./source/ ./destination/

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!