I am looking to do a specific copy in Fedora.
I have two folders:
'webroot': holding ALL web files/images etc
'export': folder containing thousands of PHP, CSS, JS documents that are exported from my SVN repo.
The export directory contains many of the same files/folders that the root does, however the root contains additional ones not found in export.
I'd like to merge all of the contents of export with my webroot with the following options:
- Overwriting the file in webroot if export's version contains different code than what
is inside of webroot's version (live)
- Preserve the permissions/users/groups of the file if it is overwritten (the export
version replacing the live version) *NOTE I would like the webroots permissions/ownership maintained, but with export's contents
- No prompting/stopping of the copy
of any kind (ie not verbose)
- Recursive copy - obviously I
would like to copy all* files
folders and subfolders found in
export
I've done a bit of research into cp - would this do the job?:
cp -pruf ./export /path/to/webroot
It might, but any time the corresponding files in export
and webroot
have the same content but different modification times, you'd wind up performing an unnecessary copy operation. You'd probably get slightly smarter behavior from rsync
:
rsync -pr ./export /path/to/webroot
Besides, rsync
can copy files from one host to another over an SSH connection, if you ever have a need to do that. Plus, it has a zillion options you can specify to tweak its behavior - look in the man page for details.
EDIT: with respect to your clarification about what you mean by preserving permissions: you'd probably want to leave off the -p
option.
- -u overwrites existing files folder if the destination is older than source
- -p perserves the permission and dates
- -f turns off verbosity
- -r makes the copy recursive
So looks like you got all the correct args to cp
Sounds like a job for cpio
(and hence, probably, GNU tar can do it too):
cd export
find . -print | cpio -pvdm /path/to/webroot
If you need owners preserved, you have to do it as root, of course. The -p
option is 'pass mode', meaning copy between locations; -v
is verbose (but not interactive; there's a difference); -d
means create directories as necessary; -m
means preserve modification time. By default, without the -u
option, cpio
won't overwrite files in the target area that are newer than the one from the source area.