Difference between cp -r and cp -a

488,198

Solution 1

Recursive means that cp copies the contents of directories, and if a directory has subdirectories they are copied (recursively) too. Without -R, the cp command skips directories. -r is identical with -R on Linux, it differs in some edge cases on some other unix variants.

By default, cp creates a new file which has the same content as the old file, and the same permissions but restricted by the umask; the copy is dated from the time of the copy, and belongs to the user doing the copy. With the -p option, the copy has the same modification time, the same access time, and the same permissions as the original. It also has the same owner and group as the original, if the user doing the copy has the permission to create such files.

The -a option means -R and -p, plus a few other preservation options. It attempts to make a copy that's as close to the original as possible: same directory tree, same file types, same contents, same metadata (times, permissions, extended attributes, etc.).

Solution 2

The -r or -R option for "recursive" means that it will copy all of the files including the files inside of subfolders.

The -a option as listed is the same as -dR which means it will preserve links as well as copy the contents of subdirectories. What it means by preserving links is that it will not follow links as it is recursively copying.

Share:
488,198

Related videos on Youtube

Jeff Schaller
Author by

Jeff Schaller

Unix Systems administrator http://www.catb.org/esr/faqs/smart-questions.html http://unix.stackexchange.com/help/how-to-ask http://sscce.org/ http://stackoverflow.com/help/mcve

Updated on September 18, 2022

Comments

  • Jeff Schaller
    Jeff Schaller almost 2 years

    I'm looking for the difference between cp -r and cp -a. What does "recursive" mean in terms of copying files from a folder?

    • Admin
      Admin almost 12 years
      I can understand your frustration, but imo, most times best way to learn is to test and experiment.
    • Admin
      Admin about 4 years
      @tripledes, my computational biology professor said that is a great way to somewhat understand the specific cases you've tested without actually understanding the underlying rules. As a scientist, I can tell you that experiments only answer the questions you know to ask.
  • ams
    ams almost 12 years
    Basically, unless you want something special, you never need -r because -a (for archive) is always the safest and probably what you expected to happen.
  • Gilles 'SO- stop being evil'
    Gilles 'SO- stop being evil' almost 12 years
    @ams Yes, that's a good summary. The only common reason to use -r is because you're on some unix variant other than Linux that doesn't have -a, and generally you'd use cp -rp. Or rsync -a.
  • Arkady
    Arkady about 5 years
    Not -r, not -R doesn't work in Ubuntu 18
  • Isaac Rabinovitch
    Isaac Rabinovitch over 2 years
    Good summary, but according to my man page, -a (short for --archive) means -dR --preserve=all. Which is almost the same as what you said.
  • Oleksii Nezhyborets
    Oleksii Nezhyborets over 2 years
    macOS man says "Preserves structure and attributes of files but not directory structure"
  • Gilles 'SO- stop being evil'
    Gilles 'SO- stop being evil' over 2 years
    @OleksiiNezhyborets I wonder what this is supposed to mean. It also says that -a is an alias for -RPp and -R does preserve directory structure`.