Sign up ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It's 100% free, no registration required.

So I was going to back up my home folder by copying it to an external drive as follows:

sudo cp -r /home/my_home /media/backup/my_home

With the result that all folders on the external drives are now owned by root:root. How can I have cp keep the ownership and permissions from the original?

share|improve this question
man cp would be a good starting point. – Wojtek Rzepala Jul 20 '12 at 16:07
Yes, it would, be I'm glad he asked because google is still faster than 'man' :-). – Stijn Geukens Aug 4 '14 at 14:54

7 Answers 7

up vote 132 down vote accepted
sudo cp -rp /home/my_home /media/backup/my_home

From cp manpage:

 -p     same as --preserve=mode,ownership,timestamps

          preserve the specified attributes (default: mode,ownership,timestamps),
          if possible additional attributes: context, links, xattr, all
share|improve this answer
Much better to use cp -a. This also includes the -recursive flag, but it does more than that—it preserves everything about the file; SELinux attributes, links, xattr, everything. It's "archive mode." There are better tools for making a backup, but if you're using cp for a backup, don't use anything other than cp -a. – Wildcard Oct 14 at 3:54
It works, but Patience is Good here. The command will only set everything right when it finishes: While it's still copying a directory, and you're running cp as root, the directory will be owned by root. It will only set it to the right permissions when it finishes with this directory. – Paul Nov 18 at 17:01
cp -a

Where -a is short for --archive — basically it copies a directory exactly as it is; the files retain all their attributes, and symlinks are not dereferenced (-d).

From man cp:

   -a, --archive
          same as -dR --preserve=all
share|improve this answer

The answer is simple: cp has a -p option that preserves permissions (here's a fish).

But as Wojtek says in his comment, man cp (reading the fine manual) would be a good starting point (wanna learn how to fish?).

share|improve this answer

I use cp -pdRx which will -p preserve mode, ownership & timestamps, -d preserve links (so you get symlinks instead the file contents copied), -R do it recursively and -x stay on one file system (only really useful if you're copying / or something with an active mount point).

PS: -R instead of -r is just habit from using ls -lR.

share|improve this answer
cp -ax is a slightly shorter version of the same thing. This worked great - thank you! – E M Mar 25 at 12:27
Actually there is a difference between -r and -R. Check the man page (even the particular part too long to be quoted here). – geckon Jul 8 at 13:23
I don't think there is (although there may once have been and may still be on some versions of Unix). See It simply says -R, -r, --recursive copy directories recursively. – StarNamer Jul 8 at 16:09

You can also use rsync.

sudo rsync -a /home/my_home/ /media/backup/my_home/

From the rsync manpage:

 -a, --archive
              This  is  equivalent  to  -rlptgoD.  It  is a quick way of saying you want
              recursion and want to preserve almost everything (with -H being a  notable
              omission).    The   only  exception  to  the  above  equivalence  is  when
              --files-from is specified, in which case -r is not implied.

              Note that -a does not preserve hardlinks, because finding  multiply-linked
              files is expensive.  You must separately specify -H.

See this question for a comparison between cp and rsync:

Note the trailing slashes (see manpage for details).

share|improve this answer
+1, cp -p is nice, but I like rsync's output so much more in general that I've aliased pcp to time rsync --progress -ah. Stands for "progress copy" in my mind. And both accept -r, so it works well for general terminal usage - but unfortunately, not in combination with sudo as shown in this question/answer. – Izkata Jul 20 '12 at 17:59
NB: rsync -a, does not preserve extended attributes (-X) and no ACLs (-A) - the short description says archive mode; equals -rlptgoD (no -H,-A,-X). E.g. SELinux contexts will not be preserverd without -X. For many use cases this is fine, but if you make a backup of your system partition, missing -X might break quite a lot. As far as I know, cp -a really preserves all file attributes. – Perseids Sep 23 '14 at 6:44

cp has an option to preserve file ownership. From the manual page of cp:

-p    Cause cp to preserve the following attributes of each source file in the copy: modification
      time, access time, file flags, file mode, user ID, and group ID, as allowed by permissions.
      Access Control Lists (ACLs) and Extended Attributes (EAs), including resource forks, will also
      be preserved.
share|improve this answer

You can do something like this:

tar cf - my_home | (cd /media/backup; sudo tar xf - )

tar keeps permissions, ownership and directory structure intact, but converts everything into a stream of bytes. You run a "subshell" (the parenthesized commands) that change directory, and then get tar to reverse the conversion. A steam of bytes becomes directories and files with correct ownership and permissions.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.