{
  "name": "rsync",
  "description": "Rsync is a file transfer program capable of efficient remote update via a fast differencing algorithm",
  "options": [
    {
      "names": [
        "-v",
        "--verbose"
      ],
      "description": "Increase verbosity"
    },
    {
      "names": [
        "--info"
      ],
      "description": "Fine-grained informational verbosity",
      "takes_arg": true,
      "arg": {
        "name": "BACKUP",
        "description": "Mention files backed up"
      }
    },
    {
      "names": [
        "--debug"
      ],
      "description": "Fine-grained debug verbosity",
      "takes_arg": true,
      "arg": {
        "name": "BACKUP",
        "description": "Mention files backed up"
      }
    },
    {
      "names": [
        "--msgs2stderr"
      ],
      "description": "Special output handling for debugging"
    },
    {
      "names": [
        "--quiet",
        "-q"
      ],
      "description": "Suppress non-error messages"
    },
    {
      "names": [
        "--no-motd"
      ],
      "description": "Suppress daemon-mode MOTD (see manpage caveat)"
    },
    {
      "names": [
        "--checksum",
        "-c"
      ],
      "description": "Skip based on checksum, not mod-time & size"
    },
    {
      "names": [
        "-a",
        "--archive"
      ],
      "description": "Archive mode; equals -rlptgoD (no -H,-A,-X)"
    },
    {
      "names": [
        "--no-OPTION"
      ],
      "description": "Turn off an implied OPTION (e.g. --no-D)"
    },
    {
      "names": [
        "-r",
        "--recursive"
      ],
      "description": "Recurse into directories"
    },
    {
      "names": [
        "-R",
        "--relative"
      ],
      "description": "Use relative path names"
    },
    {
      "names": [
        "--no-implied-dirs"
      ],
      "description": "Don't send implied dirs with --relative"
    },
    {
      "names": [
        "-b",
        "--backup"
      ],
      "description": "Make backups (see --suffix & --backup-dir)"
    },
    {
      "names": [
        "--backup-dir"
      ],
      "description": "Make backups into hierarchy based in DIR",
      "takes_arg": true,
      "arg": {
        "name": "DIR",
        "template": "folders"
      }
    },
    {
      "names": [
        "--suffix"
      ],
      "description": "Set backup suffix (default ~ w/o --backup-dir)",
      "takes_arg": true,
      "arg": {
        "name": "SUFFIX"
      }
    },
    {
      "names": [
        "-u",
        "--update"
      ],
      "description": "Skip files that are newer on the receiver"
    },
    {
      "names": [
        "--inplace"
      ],
      "description": "Update destination files in-place (SEE MAN PAGE)"
    },
    {
      "names": [
        "--append"
      ],
      "description": "Append data onto shorter files"
    },
    {
      "names": [
        "--append-verify"
      ],
      "description": "Like --append, but with old data in file checksum"
    },
    {
      "names": [
        "-d",
        "--dirs"
      ],
      "description": "Transfer directories without recursing",
      "takes_arg": true,
      "arg": {
        "name": "DIR",
        "template": "folders"
      }
    },
    {
      "names": [
        "-l",
        "--links"
      ],
      "description": "Copy symlinks as symlinks"
    },
    {
      "names": [
        "-L",
        "--copy-links"
      ],
      "description": "Transform symlink into referent file/dir"
    },
    {
      "names": [
        "--copy-unsafe-links"
      ],
      "description": "Only \"unsafe\" symlinks are transformed"
    },
    {
      "names": [
        "--safe-links"
      ],
      "description": "Ignore symlinks that point outside the source tree"
    },
    {
      "names": [
        "--munge-links"
      ],
      "description": "Munge symlinks to make them safer (but unusable)"
    },
    {
      "names": [
        "-k",
        "--copy-dirlinks"
      ],
      "description": "Transform symlink to a dir into referent dir"
    },
    {
      "names": [
        "-K",
        "--keep-dirlinks"
      ],
      "description": "Treat symlinked dir on receiver as dir"
    },
    {
      "names": [
        "-H",
        "--hard-links"
      ],
      "description": "Preserve hard links"
    },
    {
      "names": [
        "-p",
        "--perms"
      ],
      "description": "Preserve permissions"
    },
    {
      "names": [
        "-E",
        "--executability"
      ],
      "description": "Preserve the file's executability"
    },
    {
      "names": [
        "--chmod"
      ],
      "description": "Affect file and/or directory permissions",
      "takes_arg": true,
      "arg": {
        "name": "CHMOD"
      }
    },
    {
      "names": [
        "-A",
        "--acls"
      ],
      "description": "Preserve ACLs (implies --perms)"
    },
    {
      "names": [
        "-X",
        "--xattrs"
      ],
      "description": "Preserve extended attributes"
    },
    {
      "names": [
        "-o",
        "--owner"
      ],
      "description": "Preserve owner (super-user only)"
    },
    {
      "names": [
        "-g",
        "--group"
      ],
      "description": "Preserve group"
    },
    {
      "names": [
        "--devices"
      ],
      "description": "Preserve device files (super-user only)"
    },
    {
      "names": [
        "--copy-devices"
      ],
      "description": "Copy device contents as regular file"
    },
    {
      "names": [
        "--specials"
      ],
      "description": "Preserve special files"
    },
    {
      "names": [
        "-D"
      ],
      "description": "Same as --devices --specials"
    },
    {
      "names": [
        "-t",
        "--times"
      ],
      "description": "Preserve modification times"
    },
    {
      "names": [
        "-O",
        "--omit-dir-times"
      ],
      "description": "Omit directories from --times",
      "takes_arg": true,
      "arg": {
        "name": "DIR",
        "is_variadic": true,
        "template": "folders"
      }
    },
    {
      "names": [
        "-J",
        "--omit-link-times"
      ],
      "description": "Omit symlinks from --times"
    },
    {
      "names": [
        "--super"
      ],
      "description": "Receiver attempts super-user activities"
    },
    {
      "names": [
        "--fake-super"
      ],
      "description": "Store/recover privileged attrs using xattrs"
    },
    {
      "names": [
        "-S",
        "--sparse"
      ],
      "description": "Turn sequences of nulls into sparse blocks"
    },
    {
      "names": [
        "--preallocate"
      ],
      "description": "Allocate dest files before writing them"
    },
    {
      "names": [
        "-n",
        "--dry-run"
      ],
      "description": "Perform a trial run with no changes made"
    },
    {
      "names": [
        "-W",
        "--whole-file"
      ],
      "description": "Copy files whole (without delta-xfer algorithm)"
    },
    {
      "names": [
        "--checksum-choice"
      ],
      "description": "Choose the checksum algorithms",
      "takes_arg": true,
      "arg": {
        "name": "ALGORITHM",
        "suggestions": [
          "auto",
          "md4",
          "md5",
          "none"
        ]
      }
    },
    {
      "names": [
        "-x",
        "--one-file-system"
      ],
      "description": "Don't cross filesystem boundaries"
    },
    {
      "names": [
        "-B",
        "--block-size"
      ],
      "description": "Force a fixed checksum block-size",
      "takes_arg": true,
      "arg": {
        "name": "SIZE"
      }
    },
    {
      "names": [
        "-e",
        "--rsh"
      ],
      "description": "Specify the remote shell to use",
      "takes_arg": true,
      "arg": {
        "name": "COMMAND"
      }
    },
    {
      "names": [
        "--rsync-path"
      ],
      "description": "Specify the rsync to run on the remote machine",
      "takes_arg": true,
      "arg": {
        "name": "PATH"
      }
    },
    {
      "names": [
        "--existing"
      ],
      "description": "Skip creating new files on receiver"
    },
    {
      "names": [
        "--ignore-existing"
      ],
      "description": "Skip updating files that already exist on receiver"
    },
    {
      "names": [
        "--remove-source-files"
      ],
      "description": "Sender removes synchronized files (non-dirs)"
    },
    {
      "names": [
        "--delete"
      ],
      "description": "Delete extraneous files from destination dirs"
    },
    {
      "names": [
        "--delete-before"
      ],
      "description": "Receiver deletes before transfer, not during"
    },
    {
      "names": [
        "--delete-during",
        "--del"
      ],
      "description": "Receiver deletes during the transfer"
    },
    {
      "names": [
        "--delete-delay"
      ],
      "description": "Find deletions during, delete after"
    },
    {
      "names": [
        "--delete-after"
      ],
      "description": "Receiver deletes after transfer, not during"
    },
    {
      "names": [
        "--delete-excluded"
      ],
      "description": "Also delete excluded files from destination dirs"
    },
    {
      "names": [
        "--ignore-missing-args"
      ],
      "description": "Ignore missing source args without error"
    },
    {
      "names": [
        "--delete-missing-args"
      ],
      "description": "Delete missing source args from destination"
    },
    {
      "names": [
        "--ignore-errors"
      ],
      "description": "Delete even if there are I/O errors"
    },
    {
      "names": [
        "--force"
      ],
      "description": "Force deletion of directories even if not empty"
    },
    {
      "names": [
        "--max-delete"
      ],
      "description": "Don't delete more than NUM files",
      "takes_arg": true,
      "arg": {
        "name": "NUM"
      }
    },
    {
      "names": [
        "--max-size"
      ],
      "description": "Don't transfer any file larger than SIZE",
      "takes_arg": true,
      "arg": {
        "name": "SIZE"
      }
    },
    {
      "names": [
        "--min-size"
      ],
      "description": "Don't transfer any file smaller than SIZE",
      "takes_arg": true,
      "arg": {
        "name": "SIZE"
      }
    },
    {
      "names": [
        "--partial"
      ],
      "description": "Keep partially transferred files"
    },
    {
      "names": [
        "--partial-dir=DIR"
      ],
      "description": "Put a partially transferred file into DIR",
      "takes_arg": true,
      "arg": {
        "name": "DIR",
        "template": "folders"
      }
    },
    {
      "names": [
        "--delay-updates"
      ],
      "description": "Put all updated files into place at transfer's end"
    },
    {
      "names": [
        "-m",
        "--prune-empty-dirs"
      ],
      "description": "Prune empty directory chains from the file-list"
    },
    {
      "names": [
        "--numeric-ids"
      ],
      "description": "Don't map uid/gid values by user/group name"
    },
    {
      "names": [
        "--usermap"
      ],
      "description": "Custom username mapping",
      "takes_arg": true,
      "arg": {
        "name": "STRING"
      }
    },
    {
      "names": [
        "--groupmap"
      ],
      "description": "Custom groupname mapping",
      "takes_arg": true,
      "arg": {
        "name": "STRING"
      }
    },
    {
      "names": [
        "--chown=USER:GROUP"
      ],
      "description": "Simple username/groupname mapping",
      "takes_arg": true,
      "arg": {
        "name": "USER:GROUP"
      }
    },
    {
      "names": [
        "--timeout"
      ],
      "description": "Set I/O timeout in seconds",
      "takes_arg": true,
      "arg": {
        "name": "SECONDS"
      }
    },
    {
      "names": [
        "--contimeout"
      ],
      "description": "Set daemon connection timeout in seconds",
      "takes_arg": true,
      "arg": {
        "name": "SECONDS"
      }
    },
    {
      "names": [
        "-I",
        "--ignore-times"
      ],
      "description": "Don't skip files that match in size and mod-time"
    },
    {
      "names": [
        "-M"
      ],
      "description": "Send OPTION to the remote side only",
      "takes_arg": true,
      "arg": {
        "name": "OPTION"
      }
    },
    {
      "names": [
        "--remote-option"
      ],
      "description": "Send OPTION to the remote side only",
      "takes_arg": true,
      "arg": {
        "name": "OPTION"
      }
    },
    {
      "names": [
        "--size-only"
      ],
      "description": "Skip files that match in size"
    },
    {
      "names": [
        "-@"
      ],
      "description": "Set the accuracy for mod-time comparisons",
      "takes_arg": true,
      "arg": {
        "name": "NUM"
      }
    },
    {
      "names": [
        "--modify-window"
      ],
      "description": "Set the accuracy for mod-time comparisons",
      "takes_arg": true,
      "arg": {
        "name": "NUM"
      }
    },
    {
      "names": [
        "-T"
      ],
      "description": "Create temporary files in directory DIR",
      "takes_arg": true,
      "arg": {
        "name": "DIR",
        "template": "folders"
      }
    },
    {
      "names": [
        "--temp-dir"
      ],
      "description": "Create temporary files in directory DIR",
      "takes_arg": true,
      "arg": {
        "name": "DIR",
        "template": "folders"
      }
    },
    {
      "names": [
        "-y",
        "--fuzzy"
      ],
      "description": "Find similar file for basis if no dest file"
    },
    {
      "names": [
        "--compare-dest"
      ],
      "description": "Also compare destination files relative to DIR",
      "takes_arg": true,
      "arg": {
        "name": "DIR",
        "template": "folders"
      }
    },
    {
      "names": [
        "--copy-dest"
      ],
      "description": "Also compare destination files relative to DIR and include copies of unchanged files",
      "takes_arg": true,
      "arg": {
        "name": "DIR",
        "template": "folders"
      }
    },
    {
      "names": [
        "--link-dest"
      ],
      "description": "Hardlink to files in DIR when unchanged",
      "takes_arg": true,
      "arg": {
        "name": "DIR",
        "template": "folders"
      }
    },
    {
      "names": [
        "-z",
        "--compress"
      ],
      "description": "Compress file data during the transfer"
    },
    {
      "names": [
        "--compress-level"
      ],
      "description": "Explicitly set compression level",
      "takes_arg": true,
      "arg": {
        "name": "NUM",
        "suggestions": [
          "0",
          "1",
          "2",
          "3",
          "4",
          "5",
          "6",
          "7",
          "8",
          "9"
        ]
      }
    },
    {
      "names": [
        "--skip-compress"
      ],
      "description": "Skip compressing files with a suffix in LIST",
      "takes_arg": true,
      "arg": {
        "name": "LIST"
      }
    },
    {
      "names": [
        "-C",
        "--cvs-exclude"
      ],
      "description": "Auto-ignore files the same way CVS does"
    },
    {
      "names": [
        "-f"
      ],
      "description": "Add a file-filtering RULE",
      "takes_arg": true,
      "arg": {
        "name": "RULE"
      }
    },
    {
      "names": [
        "--filter"
      ],
      "description": "Add a file-filtering RULE",
      "takes_arg": true,
      "arg": {
        "name": "RULE"
      }
    },
    {
      "names": [
        "-F"
      ],
      "description": "Same as --filter='dir-merge /.rsync-filter'",
      "takes_arg": true,
      "arg": {
        "name": "DIR",
        "is_variadic": true,
        "template": "folders"
      }
    },
    {
      "names": [
        "--exclude"
      ],
      "description": "Exclude files matching PATTERN",
      "takes_arg": true,
      "arg": {
        "name": "PATTERN"
      }
    },
    {
      "names": [
        "--exclude-from"
      ],
      "description": "Read exclude patterns from FILE",
      "takes_arg": true,
      "arg": {
        "name": "FILE",
        "template": "filepaths"
      }
    },
    {
      "names": [
        "--include"
      ],
      "description": "Don't exclude files matching PATTERN",
      "takes_arg": true,
      "arg": {
        "name": "PATTERN"
      }
    },
    {
      "names": [
        "--include-from"
      ],
      "description": "Read include patterns from FILE",
      "takes_arg": true,
      "arg": {
        "name": "FILE",
        "template": "filepaths"
      }
    },
    {
      "names": [
        "--files-from"
      ],
      "description": "Read list of source-file names from FILE",
      "takes_arg": true,
      "arg": {
        "name": "FILE",
        "template": "filepaths"
      }
    },
    {
      "names": [
        "-0",
        "--from0"
      ],
      "description": "All *-from/filter files are delimited by 0s"
    },
    {
      "names": [
        "-s",
        "--protect-args"
      ],
      "description": "No space-splitting; only wildcard special-chars"
    },
    {
      "names": [
        "--address"
      ],
      "description": "Bind address for outgoing socket to daemon",
      "takes_arg": true,
      "arg": {
        "name": "ADDRESS"
      }
    },
    {
      "names": [
        "--port"
      ],
      "description": "Specify double-colon alternate port number",
      "takes_arg": true,
      "arg": {
        "name": "PORT"
      }
    },
    {
      "names": [
        "--sockopts"
      ],
      "description": "Specify custom TCP options",
      "takes_arg": true,
      "arg": {
        "name": "OPTIONS"
      }
    },
    {
      "names": [
        "--blocking-io"
      ],
      "description": "Use blocking I/O for the remote shell"
    },
    {
      "names": [
        "--stats"
      ],
      "description": "Give some file-transfer stats"
    },
    {
      "names": [
        "-8",
        "--8-bit-output"
      ],
      "description": "Leave high-bit chars unescaped in output"
    },
    {
      "names": [
        "-h",
        "--human-readable"
      ],
      "description": "Output numbers in a human-readable format"
    },
    {
      "names": [
        "--progress"
      ],
      "description": "Show progress during transfer"
    },
    {
      "names": [
        "-P"
      ],
      "description": "Same as --partial --progress"
    },
    {
      "names": [
        "-i",
        "--itemize-changes"
      ],
      "description": "Output a change-summary for all updates"
    },
    {
      "names": [
        "--out-format"
      ],
      "description": "Output updates using the specified FORMAT",
      "takes_arg": true,
      "arg": {
        "name": "FORMAT"
      }
    },
    {
      "names": [
        "--log-file"
      ],
      "description": "Log what we're doing to the specified FILE",
      "takes_arg": true,
      "arg": {
        "name": "FILE",
        "template": "filepaths"
      }
    },
    {
      "names": [
        "--log-file-format"
      ],
      "description": "Log updates using the specified FMT",
      "takes_arg": true,
      "arg": {
        "name": "FMT"
      }
    },
    {
      "names": [
        "--password-file"
      ],
      "description": "Read daemon-access password from FILE",
      "takes_arg": true,
      "arg": {
        "name": "FILE",
        "template": "filepaths"
      }
    },
    {
      "names": [
        "--list-only"
      ],
      "description": "List the files instead of copying them"
    },
    {
      "names": [
        "--bwlimit"
      ],
      "description": "Limit socket I/O bandwidth",
      "takes_arg": true,
      "arg": {
        "name": "RATE"
      }
    },
    {
      "names": [
        "--stop-at"
      ],
      "description": "Stop rsync at year-month-dayThour:minute",
      "takes_arg": true,
      "arg": {
        "name": "y-m-dTh:m"
      }
    },
    {
      "names": [
        "--time-limit"
      ],
      "description": "Stop rsync after MINS minutes have elapsed",
      "takes_arg": true,
      "arg": {
        "name": "MINS"
      }
    },
    {
      "names": [
        "--outbuf"
      ],
      "description": "Set output buffering to None, Line, or Block",
      "takes_arg": true,
      "arg": {
        "name": "BUFFER",
        "suggestions": [
          "N",
          "L",
          "B"
        ]
      }
    },
    {
      "names": [
        "--write-batch"
      ],
      "description": "Write a batched update to FILE",
      "takes_arg": true,
      "arg": {
        "name": "FILE",
        "template": "filepaths"
      }
    },
    {
      "names": [
        "--only-write-batch"
      ],
      "description": "Like --write-batch but w/o updating destination",
      "takes_arg": true,
      "arg": {
        "name": "FILE",
        "template": "filepaths"
      }
    },
    {
      "names": [
        "--read-batch"
      ],
      "description": "Read a batched update from FILE",
      "takes_arg": true,
      "arg": {
        "name": "FILE",
        "template": "filepaths"
      }
    },
    {
      "names": [
        "--protocol"
      ],
      "description": "Force an older protocol version to be used",
      "takes_arg": true,
      "arg": {
        "name": "NUM"
      }
    },
    {
      "names": [
        "--iconv"
      ],
      "description": "Request charset conversion of filenames",
      "takes_arg": true,
      "arg": {
        "name": "CONVERT_SPEC"
      }
    },
    {
      "names": [
        "--checksum-seed"
      ],
      "description": "Set block/file checksum seed (advanced)",
      "takes_arg": true,
      "arg": {
        "name": "NUM"
      }
    },
    {
      "names": [
        "--noatime"
      ],
      "description": "Do not alter atime when opening source files"
    },
    {
      "names": [
        "-4",
        "--ipv4"
      ],
      "description": "Prefer IPv4"
    },
    {
      "names": [
        "-6",
        "--ipv6"
      ],
      "description": "Prefer IPv6"
    },
    {
      "names": [
        "--version"
      ],
      "description": "Print version number"
    },
    {
      "names": [
        "-h",
        "--help"
      ],
      "description": "Show help for rsync (-h is --help only if used alone)"
    }
  ],
  "args": [
    {
      "name": "SRC",
      "is_variadic": true
    },
    {
      "name": "DEST"
    }
  ]
}
