From 1347d5126a4d89718544d976f64943dfa93dd8c4 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 23 Jan 2000 01:53:18 +0000 Subject: [PATCH] added --existing option, similar to one suggested by Gildas Quiniou --- generator.c | 7 +++++++ options.c | 12 +++++++++++- rsync.yo | 16 +++++----------- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/generator.c b/generator.c index 3f6322f8..cb63f72e 100644 --- a/generator.c +++ b/generator.c @@ -178,6 +178,7 @@ void recv_generator(char *fname,struct file_list *flist,int i,int f_out) extern char *compare_dest; extern int list_only; extern int preserve_perms; + extern int only_existing; if (list_only) return; @@ -186,6 +187,12 @@ void recv_generator(char *fname,struct file_list *flist,int i,int f_out) statret = link_stat(fname,&st); + if (only_existing && statret == -1 && errno == ENOENT) { + /* we only want to update existing files */ + if (verbose > 1) rprintf(FINFO,"not creating %s\n",fname); + return; + } + if (statret == 0 && !preserve_perms && (S_ISDIR(st.st_mode) == S_ISDIR(file->mode))) { diff --git a/options.c b/options.c index 623385ae..e4924bf7 100644 --- a/options.c +++ b/options.c @@ -63,6 +63,7 @@ int copy_unsafe_links=0; int block_size=BLOCK_SIZE; int size_only=0; int delete_after=0; +int only_existing=0; char *backup_suffix = BACKUP_SUFFIX; char *tmpdir = NULL; @@ -125,6 +126,7 @@ void usage(int F) rprintf(F," -e, --rsh=COMMAND specify rsh replacement\n"); rprintf(F," --rsync-path=PATH specify path to rsync on the remote machine\n"); rprintf(F," -C, --cvs-exclude auto ignore files in the same way CVS does\n"); + rprintf(F," --existing only update files that already exist\n"); rprintf(F," --delete delete files that don't exist on the sending side\n"); rprintf(F," --delete-excluded also delete excluded files on the receiving side\n"); rprintf(F," --delete-after delete after transferring, not before\n"); @@ -165,7 +167,7 @@ enum {OPT_VERSION, OPT_SUFFIX, OPT_SENDER, OPT_SERVER, OPT_EXCLUDE, OPT_INCLUDE, OPT_INCLUDE_FROM, OPT_STATS, OPT_PARTIAL, OPT_PROGRESS, OPT_COPY_UNSAFE_LINKS, OPT_SAFE_LINKS, OPT_COMPARE_DEST, OPT_LOG_FORMAT, OPT_PASSWORD_FILE, OPT_SIZE_ONLY, OPT_ADDRESS, - OPT_DELETE_AFTER}; + OPT_DELETE_AFTER, OPT_EXISTING}; static char *short_options = "oblLWHpguDCtcahvqrRIxnSe:B:T:zP"; @@ -173,6 +175,7 @@ static struct option long_options[] = { {"version", 0, 0, OPT_VERSION}, {"server", 0, 0, OPT_SERVER}, {"sender", 0, 0, OPT_SENDER}, + {"existing", 0, 0, OPT_EXISTING}, {"delete", 0, 0, OPT_DELETE}, {"delete-excluded", 0, 0, OPT_DELETE_EXCLUDED}, {"force", 0, 0, OPT_FORCE}, @@ -320,6 +323,10 @@ int parse_arguments(int argc, char *argv[], int frommain) delete_mode = 1; break; + case OPT_EXISTING: + only_existing = 1; + break; + case OPT_DELETE_AFTER: delete_after = 1; break; @@ -652,6 +659,9 @@ void server_options(char **args,int *argc) if (numeric_ids) args[ac++] = "--numeric-ids"; + if (only_existing) + args[ac++] = "--existing"; + if (tmpdir) { args[ac++] = "--temp-dir"; args[ac++] = tmpdir; diff --git a/rsync.yo b/rsync.yo index 9007cd0d..75d9082e 100644 --- a/rsync.yo +++ b/rsync.yo @@ -216,17 +216,6 @@ Here is a short summary of the options available in rsync. Please refer to the detailed description below for a complete description. verb( -Usage: rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST - or rsync [OPTION]... [USER@]HOST:SRC DEST - or rsync [OPTION]... SRC [SRC]... DEST - or rsync [OPTION]... [USER@]HOST::SRC [DEST] - or rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST - or rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST] -SRC on single-colon remote HOST will be expanded by remote shell -SRC on server remote HOST may contain shell wildcards or multiple - sources separated by space as long as they have same top-level - -Options -v, --verbose increase verbosity -q, --quiet decrease verbosity -c, --checksum always checksum @@ -254,8 +243,10 @@ Options -e, --rsh=COMMAND specify rsh replacement --rsync-path=PATH specify path to rsync on the remote machine -C, --cvs-exclude auto ignore files in the same way CVS does + --existing only update files that already exist --delete delete files that don't exist on the sending side --delete-excluded also delete excluded files on the receiving side + --delete-after delete after transferring, not before --partial keep partially transferred files --force force deletion of directories even if not empty --numeric-ids don't map uid/gid values by user/group name @@ -433,6 +424,9 @@ dit(bf(-x, --one-file-system)) This tells rsync not to cross filesystem boundaries when recursing. This is useful for transferring the contents of only one filesystem. +dit(bf(--existing)) This tells rsync not to create any new files - +only update files that already exist on the destination. + dit(bf(--delete)) This tells rsync to delete any files on the receiving side that aren't on the sending side. Files that are excluded from transfer are excluded from being deleted unless you use --delete-excluded. -- 2.34.1