]> git.ipfire.org Git - thirdparty/rsync.git/commitdiff
added --existing option, similar to one suggested by Gildas Quiniou <gildas@stip.fr>
authorAndrew Tridgell <tridge@samba.org>
Sun, 23 Jan 2000 01:53:18 +0000 (01:53 +0000)
committerAndrew Tridgell <tridge@samba.org>
Sun, 23 Jan 2000 01:53:18 +0000 (01:53 +0000)
generator.c
options.c
rsync.yo

index 3f6322f8538302681fb386c0b36c26d19ab142e7..cb63f72eba9737b9f9ed17aa65bbe37b4d2cde46 100644 (file)
@@ -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))) {
index 623385aefa820738b91ff8a68150b7e78a849473..e4924bf791e82814c3609ecef4fc9fc20edfde2b 100644 (file)
--- 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;
index 9007cd0d70a4fd1c657b741aa7f845bfd0ec0d3a..75d9082ecfb6b0c377787a9f0e9294c8ed40bdce 100644 (file)
--- 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.