]> git.ipfire.org Git - thirdparty/rsync.git/commitdiff
Translate man page's option list into .h files for options.h to use.
authorWayne Davison <wayne@opencoder.net>
Fri, 12 Jun 2020 03:24:53 +0000 (20:24 -0700)
committerWayne Davison <wayne@opencoder.net>
Fri, 12 Jun 2020 03:34:23 +0000 (20:34 -0700)
.gitignore
Makefile.in
options.c
rsync.1.md

index c4ab40ee004a8a261370797f4750c9dfd937eab7..9c287d14625bfcf93117c1a8e2c30bc13ee6fcd6 100644 (file)
@@ -18,6 +18,7 @@ aclocal.m4
 /rsync*.1
 /rsync*.5
 /rsync*.html
+/help-rsync*.h
 /.md2man-works
 /autom4te*.cache
 /confdefs.h
index 792abbe793788109b77525c3b676f930466a0bb0..7cf73a388c813c9b6bacaad8001883351abd78dd 100644 (file)
@@ -99,10 +99,30 @@ rsync$(EXEEXT): $(OBJS)
 
 $(OBJS): $(HEADERS)
 $(CHECK_OBJS): $(HEADERS)
-options.o: latest-year.h
+options.o: latest-year.h help-rsync.h help-rsyncd.h
 
 flist.o: rounding.h
 
+help-rsync.h: rsync.1.md
+       @sed -e '1,/^# OPTIONS SUMMARY/d' \
+           -e '1,/^```/d' \
+           -e '/^```/,$$d' \
+           -e 's/"/\\"/g' \
+           -e 's/^/  rprintf(F,"/' \
+           -e 's/$$/\\n");/' \
+           <"$(srcdir)/$<" >$@
+
+help-rsyncd.h: rsync.1.md
+       @sed -e '1,/^# OPTIONS SUMMARY/d' \
+           -e '1,/^```/d' \
+           -e '1,/^```/d' \
+           -e '1,/^```/d' \
+           -e '/^```/,$$d' \
+           -e 's/"/\\"/g' \
+           -e 's/^/  rprintf(F,"/' \
+           -e 's/$$/\\n");/' \
+           <"$(srcdir)/$<" >$@
+
 rounding.h: rounding.c rsync.h proto.h
        @for r in 0 1 3; do \
            if $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o rounding -DEXTRA_ROUNDING=$$r -I. $(srcdir)/rounding.c >rounding.out 2>&1; then \
index c93abfcb2bc4745ba83c58291ad51d41d50d4ee5..a0c973ce0b461d2487f67c7a593b1ef20007a548 100644 (file)
--- a/options.c
+++ b/options.c
@@ -728,154 +728,7 @@ void usage(enum logcode F)
   rprintf(F,"to an rsync daemon, and require SRC or DEST to start with a module name.\n");
   rprintf(F,"\n");
   rprintf(F,"Options\n");
-  rprintf(F," -v, --verbose               increase verbosity\n");
-  rprintf(F,"     --info=FLAGS            fine-grained informational verbosity\n");
-  rprintf(F,"     --debug=FLAGS           fine-grained debug verbosity\n");
-  rprintf(F,"     --msgs2stderr           output messages directly to stderr\n");
-  rprintf(F," -q, --quiet                 suppress non-error messages\n");
-  rprintf(F,"     --no-motd               suppress daemon-mode MOTD (see manpage caveat)\n");
-  rprintf(F," -c, --checksum              skip based on checksum, not mod-time & size\n");
-  rprintf(F," -a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)\n");
-  rprintf(F,"     --no-OPTION             turn off an implied OPTION (e.g. --no-D)\n");
-  rprintf(F," -r, --recursive             recurse into directories\n");
-  rprintf(F," -R, --relative              use relative path names\n");
-  rprintf(F,"     --no-implied-dirs       don't send implied dirs with --relative\n");
-  rprintf(F," -b, --backup                make backups (see --suffix & --backup-dir)\n");
-  rprintf(F,"     --backup-dir=DIR        make backups into hierarchy based in DIR\n");
-  rprintf(F,"     --suffix=SUFFIX         set backup suffix (default %s w/o --backup-dir)\n",BACKUP_SUFFIX);
-  rprintf(F," -u, --update                skip files that are newer on the receiver\n");
-  rprintf(F,"     --inplace               update destination files in-place (SEE MAN PAGE)\n");
-  rprintf(F,"     --append                append data onto shorter files\n");
-  rprintf(F,"     --append-verify         like --append, but with old data in file checksum\n");
-  rprintf(F," -d, --dirs                  transfer directories without recursing\n");
-  rprintf(F," -l, --links                 copy symlinks as symlinks\n");
-  rprintf(F," -L, --copy-links            transform symlink into referent file/dir\n");
-  rprintf(F,"     --copy-unsafe-links     only \"unsafe\" symlinks are transformed\n");
-  rprintf(F,"     --safe-links            ignore symlinks that point outside the source tree\n");
-  rprintf(F,"     --munge-links           munge symlinks to make them safer (but unusable)\n");
-  rprintf(F," -k, --copy-dirlinks         transform symlink to a dir into referent dir\n");
-  rprintf(F," -K, --keep-dirlinks         treat symlinked dir on receiver as dir\n");
-  rprintf(F," -H, --hard-links            preserve hard links\n");
-  rprintf(F," -p, --perms                 preserve permissions\n");
-  rprintf(F," -E, --executability         preserve the file's executability\n");
-  rprintf(F,"     --chmod=CHMOD           affect file and/or directory permissions\n");
-#ifdef SUPPORT_ACLS
-  rprintf(F," -A, --acls                  preserve ACLs (implies --perms)\n");
-#endif
-#ifdef SUPPORT_XATTRS
-  rprintf(F," -X, --xattrs                preserve extended attributes\n");
-#endif
-  rprintf(F," -o, --owner                 preserve owner (super-user only)\n");
-  rprintf(F," -g, --group                 preserve group\n");
-  rprintf(F,"     --devices               preserve device files (super-user only)\n");
-  rprintf(F,"     --specials              preserve special files\n");
-  rprintf(F," -D                          same as --devices --specials\n");
-  rprintf(F," -t, --times                 preserve modification times\n");
-  rprintf(F," -U, --atimes                preserve access (last-used) times\n");
-  rprintf(F,"     --open-noatime          avoid changing the atime on opened files\n");
-  rprintf(F," -O, --omit-dir-times        omit directories from --times\n");
-  rprintf(F," -J, --omit-link-times       omit symlinks from --times\n");
-  rprintf(F,"     --super                 receiver attempts super-user activities\n");
-#ifdef SUPPORT_XATTRS
-  rprintf(F,"     --fake-super            store/recover privileged attrs using xattrs\n");
-#endif
-  rprintf(F," -S, --sparse                turn sequences of nulls into sparse blocks\n");
-#ifdef SUPPORT_PREALLOCATION
-  rprintf(F,"     --preallocate           allocate dest files before writing them\n");
-#else
-  rprintf(F,"     --preallocate           pre-allocate dest files on remote receiver\n");
-#endif
-  rprintf(F,"     --write-devices         write to devices as files (implies --inplace)\n");
-  rprintf(F," -n, --dry-run               perform a trial run with no changes made\n");
-  rprintf(F," -W, --whole-file            copy files whole (without delta-xfer algorithm)\n");
-  rprintf(F,"     --checksum-choice=STR   choose the checksum algorithms\n");
-  rprintf(F," -x, --one-file-system       don't cross filesystem boundaries\n");
-  rprintf(F," -B, --block-size=SIZE       force a fixed checksum block-size\n");
-  rprintf(F," -e, --rsh=COMMAND           specify the remote shell to use\n");
-  rprintf(F,"     --rsync-path=PROGRAM    specify the rsync to run on the remote machine\n");
-  rprintf(F,"     --existing              skip creating new files on receiver\n");
-  rprintf(F,"     --ignore-existing       skip updating files that already exist on receiver\n");
-  rprintf(F,"     --remove-source-files   sender removes synchronized files (non-dirs)\n");
-  rprintf(F,"     --del                   an alias for --delete-during\n");
-  rprintf(F,"     --delete                delete extraneous files from destination dirs\n");
-  rprintf(F,"     --delete-before         receiver deletes before transfer, not during\n");
-  rprintf(F,"     --delete-during         receiver deletes during the transfer\n");
-  rprintf(F,"     --delete-delay          find deletions during, delete after\n");
-  rprintf(F,"     --delete-after          receiver deletes after transfer, not during\n");
-  rprintf(F,"     --delete-excluded       also delete excluded files from destination dirs\n");
-  rprintf(F,"     --ignore-missing-args   ignore missing source args without error\n");
-  rprintf(F,"     --delete-missing-args   delete missing source args from destination\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,"     --max-delete=NUM        don't delete more than NUM files\n");
-  rprintf(F,"     --max-size=SIZE         don't transfer any file larger than SIZE\n");
-  rprintf(F,"     --min-size=SIZE         don't transfer any file smaller than SIZE\n");
-  rprintf(F,"     --partial               keep partially transferred files\n");
-  rprintf(F,"     --partial-dir=DIR       put a partially transferred file into DIR\n");
-  rprintf(F,"     --delay-updates         put all updated files into place at transfer's end\n");
-  rprintf(F," -m, --prune-empty-dirs      prune empty directory chains from the file-list\n");
-  rprintf(F,"     --numeric-ids           don't map uid/gid values by user/group name\n");
-  rprintf(F,"     --usermap=STRING        custom username mapping\n");
-  rprintf(F,"     --groupmap=STRING       custom groupname mapping\n");
-  rprintf(F,"     --chown=USER:GROUP      simple username/groupname mapping\n");
-  rprintf(F,"     --timeout=SECONDS       set I/O timeout in seconds\n");
-  rprintf(F,"     --contimeout=SECONDS    set daemon connection timeout in seconds\n");
-  rprintf(F," -I, --ignore-times          don't skip files that match in size and mod-time\n");
-  rprintf(F," -M, --remote-option=OPTION  send OPTION to the remote side only\n");
-  rprintf(F,"     --size-only             skip files that match in size\n");
-  rprintf(F," -@, --modify-window=NUM     set the accuracy for mod-time comparisons\n");
-  rprintf(F," -T, --temp-dir=DIR          create temporary files in directory DIR\n");
-  rprintf(F," -y, --fuzzy                 find similar file for basis if no dest file\n");
-  rprintf(F,"     --compare-dest=DIR      also compare destination files relative to DIR\n");
-  rprintf(F,"     --copy-dest=DIR         ... and include copies of unchanged files\n");
-  rprintf(F,"     --link-dest=DIR         hardlink to files in DIR when unchanged\n");
-  rprintf(F," -z, --compress              compress file data during the transfer\n");
-  rprintf(F,"     --compress-level=NUM    explicitly set compression level\n");
-  rprintf(F,"     --skip-compress=LIST    skip compressing files with a suffix in LIST\n");
-  rprintf(F," -C, --cvs-exclude           auto-ignore files the same way CVS does\n");
-  rprintf(F," -f, --filter=RULE           add a file-filtering RULE\n");
-  rprintf(F," -F                          same as --filter='dir-merge /.rsync-filter'\n");
-  rprintf(F,"                             repeated: --filter='- .rsync-filter'\n");
-  rprintf(F,"     --exclude=PATTERN       exclude files matching PATTERN\n");
-  rprintf(F,"     --exclude-from=FILE     read exclude patterns from FILE\n");
-  rprintf(F,"     --include=PATTERN       don't exclude files matching PATTERN\n");
-  rprintf(F,"     --include-from=FILE     read include patterns from FILE\n");
-  rprintf(F,"     --files-from=FILE       read list of source-file names from FILE\n");
-  rprintf(F," -0, --from0                 all *-from/filter files are delimited by 0s\n");
-  rprintf(F," -s, --protect-args          no space-splitting; only wildcard special-chars\n");
-  rprintf(F,"     --copy-as=USER[:GROUP]  specify user & optional group for the copy\n");
-  rprintf(F,"     --address=ADDRESS       bind address for outgoing socket to daemon\n");
-  rprintf(F,"     --port=PORT             specify double-colon alternate port number\n");
-  rprintf(F,"     --sockopts=OPTIONS      specify custom TCP options\n");
-  rprintf(F,"     --blocking-io           use blocking I/O for the remote shell\n");
-  rprintf(F,"     --stats                 give some file-transfer stats\n");
-  rprintf(F," -8, --8-bit-output          leave high-bit chars unescaped in output\n");
-  rprintf(F," -h, --human-readable        output numbers in a human-readable format\n");
-  rprintf(F,"     --progress              show progress during transfer\n");
-  rprintf(F," -P                          same as --partial --progress\n");
-  rprintf(F," -i, --itemize-changes       output a change-summary for all updates\n");
-  rprintf(F,"     --out-format=FORMAT     output updates using the specified FORMAT\n");
-  rprintf(F,"     --log-file=FILE         log what we're doing to the specified FILE\n");
-  rprintf(F,"     --log-file-format=FMT   log updates using the specified FMT\n");
-  rprintf(F,"     --password-file=FILE    read daemon-access password from FILE\n");
-  rprintf(F,"     --list-only             list the files instead of copying them\n");
-  rprintf(F,"     --bwlimit=RATE          limit socket I/O bandwidth\n");
-#ifdef HAVE_SETVBUF
-  rprintf(F,"     --outbuf=N|L|B          set output buffering to None, Line, or Block\n");
-#endif
-  rprintf(F,"     --write-batch=FILE      write a batched update to FILE\n");
-  rprintf(F,"     --only-write-batch=FILE like --write-batch but w/o updating destination\n");
-  rprintf(F,"     --read-batch=FILE       read a batched update from FILE\n");
-  rprintf(F,"     --protocol=NUM          force an older protocol version to be used\n");
-#ifdef ICONV_OPTION
-  rprintf(F,"     --iconv=CONVERT_SPEC    request charset conversion of filenames\n");
-#endif
-  rprintf(F,"     --checksum-seed=NUM     set block/file checksum seed (advanced)\n");
-  rprintf(F," -4, --ipv4                  prefer IPv4\n");
-  rprintf(F," -6, --ipv6                  prefer IPv6\n");
-  rprintf(F," -V, --version               print the version & other info and exit\n");
-  rprintf(F,"(-h) --help                  show this help (-h is --help only if used alone)\n");
-
+#include "help-rsync.h"
   rprintf(F,"\n");
   rprintf(F,"Use \"rsync --daemon --help\" to see the daemon-mode command-line options.\n");
   rprintf(F,"Please see the rsync(1) and rsyncd.conf(5) man pages for full documentation.\n");
@@ -1139,20 +992,7 @@ static void daemon_usage(enum logcode F)
 
   rprintf(F,"\n");
   rprintf(F,"Usage: rsync --daemon [OPTION]...\n");
-  rprintf(F,"     --address=ADDRESS       bind to the specified address\n");
-  rprintf(F,"     --bwlimit=RATE          limit socket I/O bandwidth\n");
-  rprintf(F,"     --config=FILE           specify alternate rsyncd.conf file\n");
-  rprintf(F," -M, --dparam=OVERRIDE       override global daemon config parameter\n");
-  rprintf(F,"     --no-detach             do not detach from the parent\n");
-  rprintf(F,"     --port=PORT             listen on alternate port number\n");
-  rprintf(F,"     --log-file=FILE         override the \"log file\" setting\n");
-  rprintf(F,"     --log-file-format=FMT   override the \"log format\" setting\n");
-  rprintf(F,"     --sockopts=OPTIONS      specify custom TCP options\n");
-  rprintf(F," -v, --verbose               increase verbosity\n");
-  rprintf(F," -4, --ipv4                  prefer IPv4\n");
-  rprintf(F," -6, --ipv6                  prefer IPv6\n");
-  rprintf(F,"     --help                  show this help screen\n");
-
+#include "help-rsyncd.h"
   rprintf(F,"\n");
   rprintf(F,"If you were not trying to invoke rsync as a daemon, avoid using any of the\n");
   rprintf(F,"daemon-specific rsync options.  See also the rsyncd.conf(5) man page.\n");
index 40a073318c6dc0bc30a959b15be2aed77d78f9ec..743d3b92af5260b56f54f5909be2142f05e83455 100644 (file)
@@ -327,160 +327,162 @@ This is launched from cron every few hours.
 Here is a short summary of the options available in rsync.  Please refer to the
 detailed description below for a complete description.
 
+[comment]: # (Keep these short enough that they'll be under 80 chars when indented by 8 chars.)
+
 ```
---verbose, -v               increase verbosity
---info=FLAGS                fine-grained informational verbosity
---debug=FLAGS               fine-grained debug verbosity
---msgs2stderr               output messages directly to stderr
---quiet, -q                 suppress non-error messages
---no-motd                   suppress daemon-mode MOTD (see caveat)
---checksum, -c              skip based on checksum, not mod-time & size
---archive, -a               archive mode; equals -rlptgoD (no -H,-A,-X)
---no-OPTION                 turn off an implied OPTION (e.g. --no-D)
---recursive, -r             recurse into directories
---relative, -R              use relative path names
---no-implied-dirs           don't send implied dirs with --relative
---backup, -b                make backups (see --suffix & --backup-dir)
---backup-dir=DIR            make backups into hierarchy based in DIR
---suffix=SUFFIX             backup suffix (default ~ w/o --backup-dir)
---update, -u                skip files that are newer on the receiver
---inplace                   update destination files in-place
---append                    append data onto shorter files
---append-verify             --append w/old data in file checksum
---dirs, -d                  transfer directories without recursing
---links, -l                 copy symlinks as symlinks
---copy-links, -L            transform symlink into referent file/dir
---copy-unsafe-links         only "unsafe" symlinks are transformed
---safe-links                ignore symlinks that point outside the tree
---munge-links               munge symlinks to make them safer
---copy-dirlinks, -k         transform symlink to dir into referent dir
---keep-dirlinks, -K         treat symlinked dir on receiver as dir
---hard-links, -H            preserve hard links
---perms, -p                 preserve permissions
---executability, -E         preserve executability
---chmod=CHMOD               affect file and/or directory permissions
---acls, -A                  preserve ACLs (implies -p)
---xattrs, -X                preserve extended attributes
---owner, -o                 preserve owner (super-user only)
---group, -g                 preserve group
---devices                   preserve device files (super-user only)
---specials                  preserve special files
--D                          same as --devices --specials
---times, -t                 preserve modification times
---atimes, -U                preserve access (use) times
---open-noatime              avoid changing the atime on opened files
---omit-dir-times, -O        omit directories from --times
---omit-link-times, -J       omit symlinks from --times
---super                     receiver attempts super-user activities
---fake-super                store/recover privileged attrs using xattrs
---sparse, -S                turn sequences of nulls into sparse blocks
---preallocate               allocate dest files before writing
---write-devices             write to devices as files (implies --inplace)
---dry-run, -n               perform a trial run with no changes made
---whole-file, -W            copy files whole (w/o delta-xfer algorithm)
---checksum-choice=STR       choose the checksum algorithms
---one-file-system, -x       don't cross filesystem boundaries
---block-size=SIZE, -B       force a fixed checksum block-size
---rsh=COMMAND, -e           specify the remote shell to use
---rsync-path=PROGRAM        specify the rsync to run on remote machine
---existing                  skip creating new files on receiver
---ignore-existing           skip updating files that exist on receiver
---remove-source-files       sender removes synchronized files (non-dir)
---del                       an alias for --delete-during
---delete                    delete extraneous files from dest dirs
---delete-before             receiver deletes before xfer, not during
---delete-during             receiver deletes during the transfer
---delete-delay              find deletions during, delete after
---delete-after              receiver deletes after transfer, not during
---delete-excluded           also delete excluded files from dest dirs
---ignore-missing-args       ignore missing source args without error
---delete-missing-args       delete missing source args from destination
---ignore-errors             delete even if there are I/O errors
---force                     force deletion of dirs even if not empty
---max-delete=NUM            don't delete more than NUM files
---max-size=SIZE             don't transfer any file larger than SIZE
---min-size=SIZE             don't transfer any file smaller than SIZE
---partial                   keep partially transferred files
---partial-dir=DIR           put a partially transferred file into DIR
---delay-updates             put all updated files into place at end
---prune-empty-dirs, -m      prune empty directory chains from file-list
---numeric-ids               don't map uid/gid values by user/group name
---usermap=STRING            custom username mapping
---groupmap=STRING           custom groupname mapping
---chown=USER:GROUP          simple username/groupname mapping
---timeout=SECONDS           set I/O timeout in seconds
---contimeout=SECONDS        set daemon connection timeout in seconds
---ignore-times, -I          don't skip files that match size and time
---size-only                 skip files that match in size
---modify-window=NUM, -@     set the accuracy for mod-time comparisons
---temp-dir=DIR, -T          create temporary files in directory DIR
---fuzzy, -y                 find similar file for basis if no dest file
---compare-dest=DIR          also compare received files relative to DIR
---copy-dest=DIR             ... and include copies of unchanged files
---link-dest=DIR             hardlink to files in DIR when unchanged
---compress, -z              compress file data during the transfer
---compress-level=NUM        explicitly set compression level
---skip-compress=LIST        skip compressing files with suffix in LIST
---cvs-exclude, -C           auto-ignore files in the same way CVS does
---filter=RULE, -f           add a file-filtering RULE
--F                          same as --filter='dir-merge /.rsync-filter'
-                            repeated: --filter='- .rsync-filter'
---exclude=PATTERN           exclude files matching PATTERN
---exclude-from=FILE         read exclude patterns from FILE
---include=PATTERN           don't exclude files matching PATTERN
---include-from=FILE         read include patterns from FILE
---files-from=FILE           read list of source-file names from FILE
---from0, -0                 all *from/filter files are delimited by 0s
---protect-args, -s          no space-splitting; wildcard chars only
---copy-as=USER[:GROUP]      specify user & optional group for the copy
---address=ADDRESS           bind address for outgoing socket to daemon
---port=PORT                 specify double-colon alternate port number
---sockopts=OPTIONS          specify custom TCP options
---blocking-io               use blocking I/O for the remote shell
---outbuf=N|L|B              set out buffering to None, Line, or Block
---stats                     give some file-transfer stats
---8-bit-output, -8          leave high-bit chars unescaped in output
---human-readable, -h        output numbers in a human-readable format
---progress                  show progress during transfer
--P                          same as --partial --progress
---itemize-changes, -i       output a change-summary for all updates
---remote-option=OPTION, -M  send OPTION to the remote side only
---out-format=FORMAT         output updates using the specified FORMAT
---log-file=FILE             log what we're doing to the specified FILE
---log-file-format=FMT       log updates using the specified FMT
---password-file=FILE        read daemon-access password from FILE
---list-only                 list the files instead of copying them
---bwlimit=RATE              limit socket I/O bandwidth
---write-batch=FILE          write a batched update to FILE
---only-write-batch=FILE     like --write-batch but w/o updating dest
---read-batch=FILE           read a batched update from FILE
---protocol=NUM              force an older protocol version to be used
---iconv=CONVERT_SPEC        request charset conversion of filenames
---checksum-seed=NUM         set block/file checksum seed (advanced)
---ipv4, -4                  prefer IPv4
---ipv6, -6                  prefer IPv6
---version, -V               print the version + other info and exit
---help, -h (*)              show this help (*see below for -h comment)
+--verbose, -v            increase verbosity
+--info=FLAGS             fine-grained informational verbosity
+--debug=FLAGS            fine-grained debug verbosity
+--msgs2stderr            output messages directly to stderr
+--quiet, -q              suppress non-error messages
+--no-motd                suppress daemon-mode MOTD
+--checksum, -c           skip based on checksum, not mod-time & size
+--archive, -a            archive mode; equals -rlptgoD (no -H,-A,-X)
+--no-OPTION              turn off an implied OPTION (e.g. --no-D)
+--recursive, -r          recurse into directories
+--relative, -R           use relative path names
+--no-implied-dirs        don't send implied dirs with --relative
+--backup, -b             make backups (see --suffix & --backup-dir)
+--backup-dir=DIR         make backups into hierarchy based in DIR
+--suffix=SUFFIX          backup suffix (default ~ w/o --backup-dir)
+--update, -u             skip files that are newer on the receiver
+--inplace                update destination files in-place
+--append                 append data onto shorter files
+--append-verify          --append w/old data in file checksum
+--dirs, -d               transfer directories without recursing
+--links, -l              copy symlinks as symlinks
+--copy-links, -L         transform symlink into referent file/dir
+--copy-unsafe-links      only "unsafe" symlinks are transformed
+--safe-links             ignore symlinks that point outside the tree
+--munge-links            munge symlinks to make them safe & unusable
+--copy-dirlinks, -k      transform symlink to dir into referent dir
+--keep-dirlinks, -K      treat symlinked dir on receiver as dir
+--hard-links, -H         preserve hard links
+--perms, -p              preserve permissions
+--executability, -E      preserve executability
+--chmod=CHMOD            affect file and/or directory permissions
+--acls, -A               preserve ACLs (implies --perms)
+--xattrs, -X             preserve extended attributes
+--owner, -o              preserve owner (super-user only)
+--group, -g              preserve group
+--devices                preserve device files (super-user only)
+--specials               preserve special files
+-D                       same as --devices --specials
+--times, -t              preserve modification times
+--atimes, -U             preserve access (use) times
+--open-noatime           avoid changing the atime on opened files
+--omit-dir-times, -O     omit directories from --times
+--omit-link-times, -J    omit symlinks from --times
+--super                  receiver attempts super-user activities
+--fake-super             store/recover privileged attrs using xattrs
+--sparse, -S             turn sequences of nulls into sparse blocks
+--preallocate            allocate dest files before writing them
+--write-devices          write to devices as files (implies --inplace)
+--dry-run, -n            perform a trial run with no changes made
+--whole-file, -W         copy files whole (w/o delta-xfer algorithm)
+--checksum-choice=STR    choose the checksum algorithms
+--one-file-system, -x    don't cross filesystem boundaries
+--block-size=SIZE, -B    force a fixed checksum block-size
+--rsh=COMMAND, -e        specify the remote shell to use
+--rsync-path=PROGRAM     specify the rsync to run on remote machine
+--existing               skip creating new files on receiver
+--ignore-existing        skip updating files that exist on receiver
+--remove-source-files    sender removes synchronized files (non-dir)
+--del                    an alias for --delete-during
+--delete                 delete extraneous files from dest dirs
+--delete-before          receiver deletes before xfer, not during
+--delete-during          receiver deletes during the transfer
+--delete-delay           find deletions during, delete after
+--delete-after           receiver deletes after transfer, not during
+--delete-excluded        also delete excluded files from dest dirs
+--ignore-missing-args    ignore missing source args without error
+--delete-missing-args    delete missing source args from destination
+--ignore-errors          delete even if there are I/O errors
+--force                  force deletion of dirs even if not empty
+--max-delete=NUM         don't delete more than NUM files
+--max-size=SIZE          don't transfer any file larger than SIZE
+--min-size=SIZE          don't transfer any file smaller than SIZE
+--partial                keep partially transferred files
+--partial-dir=DIR        put a partially transferred file into DIR
+--delay-updates          put all updated files into place at end
+--prune-empty-dirs, -m   prune empty directory chains from file-list
+--numeric-ids            don't map uid/gid values by user/group name
+--usermap=STRING         custom username mapping
+--groupmap=STRING        custom groupname mapping
+--chown=USER:GROUP       simple username/groupname mapping
+--timeout=SECONDS        set I/O timeout in seconds
+--contimeout=SECONDS     set daemon connection timeout in seconds
+--ignore-times, -I       don't skip files that match size and time
+--size-only              skip files that match in size
+--modify-window=NUM, -@  set the accuracy for mod-time comparisons
+--temp-dir=DIR, -T       create temporary files in directory DIR
+--fuzzy, -y              find similar file for basis if no dest file
+--compare-dest=DIR       also compare destination files relative to DIR
+--copy-dest=DIR          ... and include copies of unchanged files
+--link-dest=DIR          hardlink to files in DIR when unchanged
+--compress, -z           compress file data during the transfer
+--compress-level=NUM     explicitly set compression level
+--skip-compress=LIST     skip compressing files with suffix in LIST
+--cvs-exclude, -C        auto-ignore files in the same way CVS does
+--filter=RULE, -f        add a file-filtering RULE
+-F                       same as --filter='dir-merge /.rsync-filter'
+                         repeated: --filter='- .rsync-filter'
+--exclude=PATTERN        exclude files matching PATTERN
+--exclude-from=FILE      read exclude patterns from FILE
+--include=PATTERN        don't exclude files matching PATTERN
+--include-from=FILE      read include patterns from FILE
+--files-from=FILE        read list of source-file names from FILE
+--from0, -0              all *-from/filter files are delimited by 0s
+--protect-args, -s       no space-splitting; wildcard chars only
+--copy-as=USER[:GROUP]   specify user & optional group for the copy
+--address=ADDRESS        bind address for outgoing socket to daemon
+--port=PORT              specify double-colon alternate port number
+--sockopts=OPTIONS       specify custom TCP options
+--blocking-io            use blocking I/O for the remote shell
+--outbuf=N|L|B           set out buffering to None, Line, or Block
+--stats                  give some file-transfer stats
+--8-bit-output, -8       leave high-bit chars unescaped in output
+--human-readable, -h     output numbers in a human-readable format
+--progress               show progress during transfer
+-P                       same as --partial --progress
+--itemize-changes, -i    output a change-summary for all updates
+--remote-option=OPT, -M  send OPTION to the remote side only
+--out-format=FORMAT      output updates using the specified FORMAT
+--log-file=FILE          log what we're doing to the specified FILE
+--log-file-format=FMT    log updates using the specified FMT
+--password-file=FILE     read daemon-access password from FILE
+--list-only              list the files instead of copying them
+--bwlimit=RATE           limit socket I/O bandwidth
+--write-batch=FILE       write a batched update to FILE
+--only-write-batch=FILE  like --write-batch but w/o updating dest
+--read-batch=FILE        read a batched update from FILE
+--protocol=NUM           force an older protocol version to be used
+--iconv=CONVERT_SPEC     request charset conversion of filenames
+--checksum-seed=NUM      set block/file checksum seed (advanced)
+--ipv4, -4               prefer IPv4
+--ipv6, -6               prefer IPv6
+--version, -V            print the version + other info and exit
+--help, -h (*)           show this help (* -h is help only on its own)
 ```
 
 Rsync can also be run as a daemon, in which case the following options are
 accepted:
 
 ```
---daemon                    run as an rsync daemon
---address=ADDRESS           bind to the specified address
---bwlimit=RATE              limit socket I/O bandwidth
---config=FILE               specify alternate rsyncd.conf file
---dparam=OVERRIDE, -M       override global daemon config parameter
---no-detach                 do not detach from the parent
---port=PORT                 listen on alternate port number
---log-file=FILE             override the "log file" setting
---log-file-format=FMT       override the "log format" setting
---sockopts=OPTIONS          specify custom TCP options
---verbose, -v               increase verbosity
---ipv4, -4                  prefer IPv4
---ipv6, -6                  prefer IPv6
---help, -h                  show this help (if used after --daemon)
+--daemon                 run as an rsync daemon
+--address=ADDRESS        bind to the specified address
+--bwlimit=RATE           limit socket I/O bandwidth
+--config=FILE            specify alternate rsyncd.conf file
+--dparam=OVERRIDE, -M    override global daemon config parameter
+--no-detach              do not detach from the parent
+--port=PORT              listen on alternate port number
+--log-file=FILE          override the "log file" setting
+--log-file-format=FMT    override the "log format" setting
+--sockopts=OPTIONS       specify custom TCP options
+--verbose, -v            increase verbosity
+--ipv4, -4               prefer IPv4
+--ipv6, -6               prefer IPv6
+--help, -h               show this help (when used with --daemon)
 ```
 
 # OPTIONS