# bash completion for rsync have rsync || return _rsync() { local cur prev words cword split _init_completion -s -n : || return _expand || return 0 case $prev in --config|--password-file|--include-from|--exclude-from|--files-from|\ --log-file|--write-batch|--only-write-batch|--read-batch) compopt +o nospace _filedir return 0 ;; -T|--temp-dir|--compare-dest|--backup-dir|--partial-dir|--copy-dest|\ --link-dest) compopt +o nospace _filedir -d return 0 ;; -e|--rsh) compopt +o nospace COMPREPLY=( $( compgen -W 'rsh ssh' -- "$cur" ) ) return 0 ;; --compress-level) compopt +o nospace COMPREPLY=( $( compgen -W '{1..9}' -- "$cur" ) ) return 0 ;; esac $split && return 0 case $cur in -*) COMPREPLY=( $( compgen -W '--verbose --quiet --no-motd --checksum \ --archive --recursive --relative --no-implied-dirs \ --backup --backup-dir= --suffix= --update --inplace --append \ --append-verify --dirs --old-dirs --links --copy-links \ --copy-unsafe-links --safe-links --copy-dirlinks \ --keep-dirlinks --hard-links --perms --executability --chmod= \ --acls --xattrs --owner --group --devices --copy-devices \ --specials --times --omit-dir-times --super --fake-super \ --sparse --dry-run --whole-file --no-whole-file \ --one-file-system --block-size= --rsh= --rsync-path= \ --existing --ignore-existing --remove-source-files --delete \ --delete-before --delete-during --delete-delay --delete-after \ --delete-excluded --ignore-errors --force --max-delete= \ --max-size= --min-size= --partial --partial-dir= \ --delay-updates --prune-empty-dirs --numeric-ids --timeout= \ --contimeout= --ignore-times --size-only --modify-window= \ --temp-dir= --fuzzy --compare-dest= --copy-dest= --link-dest= \ --compress --compress-level= --skip-compress= --cvs-exclude \ --filter= --exclude= --exclude-from= --include= \ --include-from= --files-from= --from0 --protect-args \ --address= --port= --sockopts= --blocking-io --no-blocking-io \ --stats --8-bit-output --human-readable --progress \ --itemize-changes --out-format= --log-file= \ --log-file-format= --password-file= --list-only --bwlimit= \ --write-batch= --only-write-batch= --read-batch= --protocol= \ --iconv= --ipv4 --ipv6 --version --help --daemon --config= \ --no-detach' -- "$cur" ) ) [[ $COMPREPLY == *= ]] || compopt +o nospace ;; *:*) if declare -F _scp_remote_files &>/dev/null; then # find which remote shell is used local i shell=ssh for (( i=1; i < cword; i++ )); do if [[ "${words[i]}" == -@(e|-rsh) ]]; then shell=${words[i+1]} break fi done [ "$shell" = ssh ] && _scp_remote_files fi ;; *) _known_hosts_real -c -a "$cur" declare -F _scp_local_files &>/dev/null && \ _scp_local_files || _filedir ;; esac return 0 } && complete -F _rsync -o nospace rsync # Local variables: # mode: shell-script # sh-basic-offset: 4 # sh-indent-comment: t # indent-tabs-mode: nil # End: # ex: ts=4 sw=4 et filetype=sh