int am_sender=0;
int recurse = 0;
int am_daemon=0;
-int am_client=0;
int do_stats=0;
int do_progress=0;
int keep_partial=0;
int copy_unsafe_links=0;
int block_size=BLOCK_SIZE;
int size_only=0;
+int delete_after=0;
char *backup_suffix = BACKUP_SUFFIX;
char *tmpdir = NULL;
int always_checksum = 0;
int list_only = 0;
+struct in_addr socket_address = {INADDR_ANY};
+
void usage(int F)
{
rprintf(F,"rsync version %s Copyright Andrew Tridgell and Paul Mackerras\n\n",
rprintf(F," -C, --cvs-exclude auto ignore files in the same way CVS does\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");
rprintf(F," --partial keep partially transferred files\n");
rprintf(F," --force force deletion of directories even if not empty\n");
rprintf(F," --numeric-ids don't map uid/gid values by user/group name\n");
rprintf(F," --size-only only use file size when determining if a file should be transferred\n");
rprintf(F," -T --temp-dir=DIR create temporary files in directory DIR\n");
rprintf(F," --compare-dest=DIR also compare destination files relative to DIR\n");
+ rprintf(F," -P equivalent to --partial --progress\n");
rprintf(F," -z, --compress compress file data\n");
rprintf(F," --exclude=PATTERN exclude files matching PATTERN\n");
rprintf(F," --exclude-from=FILE exclude patterns listed in FILE\n");
rprintf(F," --include-from=FILE don't exclude patterns listed in FILE\n");
rprintf(F," --version print version number\n");
rprintf(F," --daemon run as a rsync daemon\n");
+ rprintf(F," --address bind to the specified address\n");
rprintf(F," --config=FILE specify alternate rsyncd.conf file\n");
rprintf(F," --port=PORT specify alternate rsyncd port number\n");
rprintf(F," --stats give some file transfer stats\n");
OPT_RSYNC_PATH, OPT_FORCE, OPT_TIMEOUT, OPT_DAEMON, OPT_CONFIG, OPT_PORT,
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_LOG_FORMAT, OPT_PASSWORD_FILE, OPT_SIZE_ONLY, OPT_ADDRESS,
+ OPT_DELETE_AFTER};
-static char *short_options = "oblLWHpguDCtcahvqrRIxnSe:B:T:z";
+static char *short_options = "oblLWHpguDCtcahvqrRIxnSe:B:T:zP";
static struct option long_options[] = {
{"version", 0, 0, OPT_VERSION},
{"stats", 0, 0, OPT_STATS},
{"progress", 0, 0, OPT_PROGRESS},
{"partial", 0, 0, OPT_PARTIAL},
+ {"delete-after",0, 0, OPT_DELETE_AFTER},
{"config", 1, 0, OPT_CONFIG},
{"port", 1, 0, OPT_PORT},
{"log-format", 1, 0, OPT_LOG_FORMAT},
+ {"address", 1, 0, OPT_ADDRESS},
{0,0,0,0}};
delete_mode = 1;
break;
+ case OPT_DELETE_AFTER:
+ delete_after = 1;
+ break;
+
case OPT_DELETE_EXCLUDED:
delete_excluded = 1;
delete_mode = 1;
keep_partial = 1;
break;
+ case 'P':
+ do_progress = 1;
+ keep_partial = 1;
+ break;
+
case OPT_CONFIG:
config_file = optarg;
break;
log_format = optarg;
break;
+ case OPT_ADDRESS:
+ {
+ struct in_addr *ia;
+ if ((ia = ip_address(optarg))) {
+ socket_address = *ia;
+ }
+ }
+ break;
+
default:
slprintf(err_buf,sizeof(err_buf),"unrecognised option\n");
return 0;
if (force_delete)
args[ac++] = "--force";
+ if (delete_after)
+ args[ac++] = "--delete-after";
+
if (copy_unsafe_links)
args[ac++] = "--copy-unsafe-links";