Unix "cp -p". Can I preserve attributes selectively?

7,932

Solution 1

From the cp manual of GNU coreutils:

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

So, you are looking for

cp --preserve=mode,timestamps source target

But if you use some non-GNU operating system, you might not be able to use these long option with cp. In that case, you can give rsync a try, where you can specify in details which attributes should be preserved (search the man page for "preserve"):

    -H, --hard-links            preserve hard links
    -p, --perms                 preserve permissions
    -E, --executability         preserve executability
    -A, --acls                  preserve ACLs (implies -p)
    -X, --xattrs                preserve extended attributes
    -o, --owner                 preserve owner (super-user only)
    -g, --group                 preserve group
        --devices               preserve device files (super-user only)
        --specials              preserve special files
    -t, --times                 preserve modification times

So, to resemble the cp command above, use something like

rsync -pEt source target

To test the command beforehand, you can initiate a "dry-run" with -n. Add also the verbose parameter -v to see what's going on:

rsync -nv -pEt source target

However, I'm not sure, if the access time will be copied, too.

Solution 2

I believe the ditto command preserves dates.

ditto src target

Share:
7,932

Related videos on Youtube

Adam
Author by

Adam

Updated on September 18, 2022

Comments

  • Adam
    Adam almost 2 years

    I'd like to copy the modification and access times, but not the user ID. If I use

    cp -p source target
    

    It will copy everything.

    I'm trying to copy files to a different user but keep the original dates intact.

  • Adam
    Adam over 10 years
    Makes sense, but I'm (noobishly) not sure how to use the long options. I've been trying to test with something safer than cp ("ls --all") but I get an "illegal option" error.
  • Adam
    Adam over 10 years
    I'm on a Mac using the Terminal application.
  • mpy
    mpy over 10 years
    Then, I think, your cp doesn't offer long options. I'll add an alternative possibility with rsync, perhaps that's an option for you.
  • David Foerster
    David Foerster over 10 years
    Or you could use one of the FOSS package managers for Mac OS and install GNU cp.
  • LOlliffe
    LOlliffe almost 5 years
    This is the only solution that worked properly for me to preserve mtimes. When using cp -p..., or cp -p -r..., for some unknown reason, 4 out of 10 files preserved their mtime as expected, but the other 6 showed up with the copy time as the new mtime.