I'm probably missing something, but it looks like your first requirement rules out using --delete, but your third requirement seems to imply the need for it because you want the source and target to be identical - and it won't be if there are any files on the target which are not on the source. If this is the case, then you may have to use more than pass - the first at the top-level without the --delete and one or more at a lower level with --delete, avoiding those top-level directories/files which do not exist on the source. It depends on exactly what you want to achieve. --dry-run is your friend. On 02/22/2017 10:36 AM, Kevin Korb wrote:> You should be fine as long as you don't add --delete. > > I would start with rsync -vai --dry-run SOURCE/ TARGET/ > Add whatever the OSX specific option is (I think -E) > > Yes, --dry-run shows you what it would have done without --dry-run and > yes, if you can't read all the files then you need to run it as root. > > On 02/22/2017 08:57 AM, David Epstein wrote: >> All the files and directories I want to talk about are on the same machine (a Mac). I have a directory that I will call SOURCE. This contains a a number of files, some of which are directories containing further files. I want to copy these files to another directory, which I will call TARGET. Please assume that SOURCE and TARGET include absolute path-names. I think they should also end in a slash (subject to correction). >> >> If a top-level file/directory is present in TARGET, but not in SOURCE, I do not want it to be disturbed. >> If a top-level file/directory is not present in TARGET, but is present in SOURCE, I want it to be recursively copied into TARGET >> If a top-level file/directory is present in TARGET and also present in SOURCE, I want it to overwrite, so that the ccorresponding file/directory in TARGET at the end of the rsync job is a copy of what is in SOURCE, with the same permissions and date-stamps. >> >> Since it’s on a Mac, I also want to transfer extended attributes. >> >> I would be grateful for the recommended recipe. >> >> Would dry-run tell me what rsync proposed to delete as well as what it proposed to install. It’s because I don’t understand the option dry-run fully that I’m reluctant to use trial-and-error to get to the right command. >> >> I think I would have to use “sudo” since some of the files are not readable by me when I am an ordinaty user. >> >> Thanks >> >> >> > >
Thanks for the helpful advice. In view of the conflicting advice from Joe and Kevin I tried creating a couple of very small directories test1 and test2, to see what happens when the rsync command rsync -avi —dry-run test1/ test2/ is given. I was pleased to see that —dry-run does explicitly say when a file is being deleted. Joe’s email is correct and it seems that Kevin’s version would not satisfy my third requirement. Joe says “It depends on exactly what you want to achieve”. I think my objectives were very clearly stated, but I’m happy to clarify if necessary. Could someone possibly elaborate on Joe’s advice, with more detail? I would be very grateful. On the first pass, it seems that one should just do rsync -avi -E SOURCE/ TARGET/ Howevr t’s not clear to me what the rsync command should be on the second pass. I could easily generate a list of files/directories in TARGET/ that should not be deleted or changed, and put these into a file “somewhere". Then I could give an rsync command with the option —delete, but how do I protect the entries in my “somewhere” file from deletion? thanks for any help David> On 23 Feb 2017, at 01:25, Joe <josephj at main.nc.us> wrote: > > I'm probably missing something, but it looks like your first requirement rules out using --delete, > but your third requirement seems to imply the need for it because you want the source and target to be identical - and it won't be if there are any files on the target which are not on the source. > > If this is the case, then you may have to use more than pass - the first at the top-level without the --delete and one or more at a lower level with --delete, avoiding those top-level directories/files which do not exist on the source. > > It depends on exactly what you want to achieve. > > --dry-run is your friend. > > On 02/22/2017 10:36 AM, Kevin Korb wrote: >> You should be fine as long as you don't add --delete. >> >> I would start with rsync -vai --dry-run SOURCE/ TARGET/ >> Add whatever the OSX specific option is (I think -E) >> >> Yes, --dry-run shows you what it would have done without --dry-run and >> yes, if you can't read all the files then you need to run it as root. >> >> On 02/22/2017 08:57 AM, David Epstein wrote: >>> All the files and directories I want to talk about are on the same machine (a Mac). I have a directory that I will call SOURCE. This contains a a number of files, some of which are directories containing further files. I want to copy these files to another directory, which I will call TARGET. Please assume that SOURCE and TARGET include absolute path-names. I think they should also end in a slash (subject to correction). >>> >>> If a top-level file/directory is present in TARGET, but not in SOURCE, I do not want it to be disturbed. >>> If a top-level file/directory is not present in TARGET, but is present in SOURCE, I want it to be recursively copied into TARGET >>> If a top-level file/directory is present in TARGET and also present in SOURCE, I want it to overwrite, so that the ccorresponding file/directory in TARGET at the end of the rsync job is a copy of what is in SOURCE, with the same permissions and date-stamps. >>> >>> Since it’s on a Mac, I also want to transfer extended attributes. >>> >>> I would be grateful for the recommended recipe. >>> >>> Would dry-run tell me what rsync proposed to delete as well as what it proposed to install. It’s because I don’t understand the option dry-run fully that I’m reluctant to use trial-and-error to get to the right command. >>> >>> I think I would have to use “sudo” since some of the files are not readable by me when I am an ordinaty user. >>> >>> Thanks >>> >>> >>> >> >> > > > -- > Please use reply-all for most replies to avoid omitting the mailing list. > To unsubscribe or change options: https://lists.samba.org/mailman/listinfo/rsync > Before posting, read: http://www.catb.org/~esr/faqs/smart-questions.html
I hate to say it because it goes against my normal advice but this is one instance where using a * in the source parameter would help... rsync -vaiE --delete --dry-run source/* target/ This would ignore any top level directory that is on the target but not the source while rsyncing with --delete any top level directory that is on the source. It is normally recommended to not use a * in the source because it causes --delete to behave this way which is not normally desirable and because * does not include dot files (or directories). On 02/23/2017 10:53 AM, David Epstein wrote:> Thanks for the helpful advice. > > In view of the conflicting advice from Joe and Kevin I tried creating a couple of very small directories test1 and test2, to see what happens when the rsync command > rsync -avi —dry-run test1/ test2/ > is given. I was pleased to see that —dry-run does explicitly say when a file is being deleted. > Joe’s email is correct and it seems that Kevin’s version would not satisfy my third requirement. > > Joe says “It depends on exactly what you want to achieve”. I think my objectives were very clearly stated, but I’m happy to clarify if necessary. > > Could someone possibly elaborate on Joe’s advice, with more detail? I would be very grateful. > On the first pass, it seems that one should just do > rsync -avi -E SOURCE/ TARGET/ > Howevr t’s not clear to me what the rsync command should be on the second pass. I could easily generate a list of files/directories in TARGET/ that should not be deleted or changed, and put these into a file “somewhere". Then I could give an rsync command with the option —delete, but how do I protect the entries in my “somewhere” file from deletion? > > thanks for any help > David > >> On 23 Feb 2017, at 01:25, Joe <josephj at main.nc.us> wrote: >> >> I'm probably missing something, but it looks like your first requirement rules out using --delete, >> but your third requirement seems to imply the need for it because you want the source and target to be identical - and it won't be if there are any files on the target which are not on the source. >> >> If this is the case, then you may have to use more than pass - the first at the top-level without the --delete and one or more at a lower level with --delete, avoiding those top-level directories/files which do not exist on the source. >> >> It depends on exactly what you want to achieve. >> >> --dry-run is your friend. >> >> On 02/22/2017 10:36 AM, Kevin Korb wrote: >>> You should be fine as long as you don't add --delete. >>> >>> I would start with rsync -vai --dry-run SOURCE/ TARGET/ >>> Add whatever the OSX specific option is (I think -E) >>> >>> Yes, --dry-run shows you what it would have done without --dry-run and >>> yes, if you can't read all the files then you need to run it as root. >>> >>> On 02/22/2017 08:57 AM, David Epstein wrote: >>>> All the files and directories I want to talk about are on the same machine (a Mac). I have a directory that I will call SOURCE. This contains a a number of files, some of which are directories containing further files. I want to copy these files to another directory, which I will call TARGET. Please assume that SOURCE and TARGET include absolute path-names. I think they should also end in a slash (subject to correction). >>>> >>>> If a top-level file/directory is present in TARGET, but not in SOURCE, I do not want it to be disturbed. >>>> If a top-level file/directory is not present in TARGET, but is present in SOURCE, I want it to be recursively copied into TARGET >>>> If a top-level file/directory is present in TARGET and also present in SOURCE, I want it to overwrite, so that the ccorresponding file/directory in TARGET at the end of the rsync job is a copy of what is in SOURCE, with the same permissions and date-stamps. >>>> >>>> Since it’s on a Mac, I also want to transfer extended attributes. >>>> >>>> I would be grateful for the recommended recipe. >>>> >>>> Would dry-run tell me what rsync proposed to delete as well as what it proposed to install. It’s because I don’t understand the option dry-run fully that I’m reluctant to use trial-and-error to get to the right command. >>>> >>>> I think I would have to use “sudo” since some of the files are not readable by me when I am an ordinaty user. >>>> >>>> Thanks >>>> >>>> >>>> >>> >>> >> >> >> -- >> Please use reply-all for most replies to avoid omitting the mailing list. >> To unsubscribe or change options: https://lists.samba.org/mailman/listinfo/rsync >> Before posting, read: http://www.catb.org/~esr/faqs/smart-questions.html-- ~*-,._.,-*~'`^`'~*-,._.,-*~'`^`'~*-,._.,-*~'`^`'~*-,._.,-*~'`^`'~*-,._., Kevin Korb Phone: (407) 252-6853 Systems Administrator Internet: FutureQuest, Inc. Kevin at FutureQuest.net (work) Orlando, Florida kmk at sanitarium.net (personal) Web page: http://www.sanitarium.net/ PGP public key available on web site. ~*-,._.,-*~'`^`'~*-,._.,-*~'`^`'~*-,._.,-*~'`^`'~*-,._.,-*~'`^`'~*-,._., -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 191 bytes Desc: OpenPGP digital signature URL: <http://lists.samba.org/pipermail/rsync/attachments/20170223/68d1c0c4/signature.sig>