int preserve_uid = 0;
int preserve_gid = 0;
int preserve_times = 0;
+int omit_dir_times = 0;
int update_only = 0;
int cvs_exclude = 0;
int dry_run = 0;
int local_server = 0;
int ignore_times = 0;
int delete_mode = 0;
+int delete_during = 0;
int delete_before = 0;
int delete_after = 0;
int delete_excluded = 0;
char *remote_filesfrom_file = NULL;
int eol_nulls = 0;
int recurse = 0;
-int keep_dirs = 0;
+int xfer_dirs = 0;
int am_daemon = 0;
int daemon_over_rsh = 0;
int do_stats = 0;
rprintf(F," --suffix=SUFFIX backup suffix (default %s w/o --backup-dir)\n",BACKUP_SUFFIX);
rprintf(F," -u, --update update only (don't overwrite newer files)\n");
rprintf(F," --inplace update destination files in-place (SEE MAN PAGE)\n");
- rprintf(F," -k, --keep-dirs transfer a directory without recursing\n");
- rprintf(F," -K, --keep-dirlinks treat symlinked dir on receiver as dir\n");
+ rprintf(F," -d, --dirs transfer directories without recursing\n");
rprintf(F," -l, --links copy symlinks as symlinks\n");
rprintf(F," -L, --copy-links copy the referent of all symlinks\n");
rprintf(F," --copy-unsafe-links copy the referent of \"unsafe\" symlinks\n");
rprintf(F," --safe-links ignore \"unsafe\" symlinks\n");
rprintf(F," -H, --hard-links preserve hard links\n");
+ rprintf(F," -K, --keep-dirlinks treat symlinked dir on receiver as dir\n");
rprintf(F," -p, --perms preserve permissions\n");
rprintf(F," -o, --owner preserve owner (root only)\n");
rprintf(F," -g, --group preserve group\n");
rprintf(F," -D, --devices preserve devices (root only)\n");
rprintf(F," -t, --times preserve times\n");
+ rprintf(F," -O, --omit-dir-times omit directories when preserving times\n");
rprintf(F," -S, --sparse handle sparse files efficiently\n");
rprintf(F," -n, --dry-run show what would have been transferred\n");
rprintf(F," -W, --whole-file copy whole files, no incremental checks\n");
rprintf(F," --existing only update files that already exist\n");
rprintf(F," --ignore-existing ignore files that already exist on receiving side\n");
rprintf(F," --delete delete files that don't exist on the sending side\n");
- rprintf(F," --delete-after receiver deletes after transferring, not before\n");
+ rprintf(F," --delete-before receiver deletes before transfer, not during\n");
+ rprintf(F," --delete-after receiver deletes after transfer, not during\n");
rprintf(F," --delete-excluded also delete excluded files on the receiving side\n");
rprintf(F," --ignore-errors delete even if there are I/O errors\n");
rprintf(F," --force force deletion of directories even if not empty\n");
rprintf(F," --progress show progress during transfer\n");
rprintf(F," --log-format=FORMAT log file transfers using specified format\n");
rprintf(F," --password-file=FILE get password from FILE\n");
+ rprintf(F," --list-only list the files instead of copying them\n");
rprintf(F," --bwlimit=KBPS limit I/O bandwidth, KBytes per second\n");
rprintf(F," --write-batch=FILE write a batch to FILE\n");
rprintf(F," --read-batch=FILE read a batch from FILE\n");
{"one-file-system", 'x', POPT_ARG_NONE, &one_file_system, 0, 0, 0 },
{"existing", 0, POPT_ARG_NONE, &only_existing, 0, 0, 0 },
{"ignore-existing", 0, POPT_ARG_NONE, &opt_ignore_existing, 0, 0, 0 },
- {"delete", 0, POPT_ARG_NONE, &delete_before, 0, 0, 0 },
+ {"delete", 0, POPT_ARG_NONE, &delete_during, 0, 0, 0 },
+ {"delete-before", 0, POPT_ARG_NONE, &delete_before, 0, 0, 0 },
{"delete-after", 0, POPT_ARG_NONE, &delete_after, 0, 0, 0 },
{"delete-excluded", 0, POPT_ARG_NONE, &delete_excluded, 0, 0, 0 },
{"force", 0, POPT_ARG_NONE, &force_delete, 0, 0, 0 },
{"cvs-exclude", 'C', POPT_ARG_NONE, &cvs_exclude, 0, 0, 0 },
{"update", 'u', POPT_ARG_NONE, &update_only, 0, 0, 0 },
{"inplace", 0, POPT_ARG_NONE, &inplace, 0, 0, 0 },
- {"keep-dirs", 'k', POPT_ARG_VAL, &keep_dirs, 2, 0, 0 },
- {"keep-dirlinks", 'K', POPT_ARG_NONE, &keep_dirlinks, 0, 0, 0 },
+ {"dirs", 'd', POPT_ARG_VAL, &xfer_dirs, 2, 0, 0 },
{"links", 'l', POPT_ARG_NONE, &preserve_links, 0, 0, 0 },
{"copy-links", 'L', POPT_ARG_NONE, ©_links, 0, 0, 0 },
+ {"keep-dirlinks", 'K', POPT_ARG_NONE, &keep_dirlinks, 0, 0, 0 },
{"whole-file", 'W', POPT_ARG_VAL, &whole_file, 1, 0, 0 },
{"no-whole-file", 0, POPT_ARG_VAL, &whole_file, 0, 0, 0 },
{"copy-unsafe-links", 0, POPT_ARG_NONE, ©_unsafe_links, 0, 0, 0 },
{"group", 'g', POPT_ARG_NONE, &preserve_gid, 0, 0, 0 },
{"devices", 'D', POPT_ARG_NONE, &preserve_devices, 0, 0, 0 },
{"times", 't', POPT_ARG_NONE, &preserve_times, 0, 0, 0 },
+ {"omit-dir-times", 'O', POPT_ARG_NONE, &omit_dir_times, 0, 0, 0 },
{"checksum", 'c', POPT_ARG_NONE, &always_checksum, 0, 0, 0 },
{"verbose", 'v', POPT_ARG_NONE, 0, 'v', 0, 0 },
{"quiet", 'q', POPT_ARG_NONE, 0, 'q', 0, 0 },
}
if (recurse || list_only || files_from)
- keep_dirs |= 1;
+ xfer_dirs |= 1;
if (relative_paths < 0)
relative_paths = files_from? 1 : 0;
- if (delete_before || delete_after)
+ if (delete_during || delete_before || delete_after)
delete_mode = 1;
if (delete_excluded && !delete_mode)
- delete_mode = delete_before = 1;
+ delete_mode = delete_during = 1;
*argv = poptGetArgs(pc);
*argc = count_args(*argv);
argstr[x++] = 'l';
if (copy_links)
argstr[x++] = 'L';
- if (keep_dirs > 1)
+ if (xfer_dirs > 1)
argstr[x++] = 'k';
if (keep_dirlinks && am_sender)
argstr[x++] = 'K';
argstr[x++] = 'D';
if (preserve_times)
argstr[x++] = 't';
+ if (omit_dir_times && am_sender)
+ argstr[x++] = 'O';
if (preserve_perms)
argstr[x++] = 'p';
if (recurse < 0)
if (am_sender) {
if (delete_excluded)
args[ac++] = "--delete-excluded";
- else if (delete_before || delete_after)
+ else if (delete_before)
+ args[ac++] = "--delete-before";
+ else if (delete_during || delete_after)
args[ac++] = "--delete";
if (delete_after)