split rsync completion
This commit is contained in:
parent
f66e16c4f0
commit
c1065b3aa9
@ -69,6 +69,7 @@ bashcomp_DATA = contrib/ant \
|
||||
contrib/ri \
|
||||
contrib/rpcdebug \
|
||||
contrib/rpmcheck \
|
||||
contrib/rsync \
|
||||
contrib/samba \
|
||||
contrib/sbcl \
|
||||
contrib/screen \
|
||||
|
@ -2856,99 +2856,6 @@ _known_hosts_real()
|
||||
complete -F _known_hosts traceroute traceroute6 tracepath tracepath6 \
|
||||
ping ping6 fping fping6 telnet host nslookup rsh rlogin ftp dig ssh-installkeys mtr
|
||||
|
||||
# rsync(1) completion
|
||||
#
|
||||
have rsync &&
|
||||
_rsync()
|
||||
{
|
||||
local cur prev shell i userhost path
|
||||
|
||||
COMPREPLY=()
|
||||
cur=`_get_cword`
|
||||
prev=${COMP_WORDS[COMP_CWORD-1]}
|
||||
|
||||
_expand || return 0
|
||||
|
||||
case "$prev" in
|
||||
--@(config|password-file|include-from|exclude-from))
|
||||
_filedir
|
||||
return 0
|
||||
;;
|
||||
-@(T|-temp-dir|-compare-dest))
|
||||
_filedir -d
|
||||
return 0
|
||||
;;
|
||||
-@(e|-rsh))
|
||||
COMPREPLY=( $( compgen -W 'rsh ssh' -- $cur ) )
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$cur" in
|
||||
-*)
|
||||
COMPREPLY=( $( compgen -W '-v -q -c -a -r -R -b -u -l -L -H \
|
||||
-p -o -g -D -t -S -n -W -x -B -e -C -I -T -P \
|
||||
-z -h -4 -6 --verbose --quiet --checksum \
|
||||
--archive --recursive --relative --backup \
|
||||
--backup-dir --suffix= --update --links \
|
||||
--copy-links --copy-unsafe-links --safe-links \
|
||||
--hard-links --perms --owner --group --devices\
|
||||
--times --sparse --dry-run --whole-file \
|
||||
--no-whole-file --one-file-system \
|
||||
--block-size= --rsh= --rsync-path= \
|
||||
--cvs-exclude --existing --ignore-existing \
|
||||
--delete --delete-excluded --delete-after \
|
||||
--ignore-errors --max-delete= --partial \
|
||||
--force --numeric-ids --timeout= \
|
||||
--ignore-times --size-only --modify-window= \
|
||||
--temp-dir= --compare-dest= --compress \
|
||||
--exclude= --exclude-from= --include= \
|
||||
--include-from= --version --daemon --no-detach\
|
||||
--address= --config= --port= --blocking-io \
|
||||
--no-blocking-io --stats --progress \
|
||||
--log-format= --password-file= --bwlimit= \
|
||||
--write-batch= --read-batch= --help' -- $cur ))
|
||||
;;
|
||||
*:*)
|
||||
# find which remote shell is used
|
||||
shell=ssh
|
||||
for (( i=1; i < COMP_CWORD; i++ )); do
|
||||
if [[ "${COMP_WORDS[i]}" == -@(e|-rsh) ]]; then
|
||||
shell=${COMP_WORDS[i+1]}
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [[ "$shell" == ssh ]]; then
|
||||
# remove backslash escape from :
|
||||
cur=${cur/\\:/:}
|
||||
userhost=${cur%%?(\\):*}
|
||||
path=${cur#*:}
|
||||
# unescape spaces
|
||||
path=${path//\\\\\\\\ / }
|
||||
if [ -z "$path" ]; then
|
||||
# default to home dir of specified
|
||||
# user on remote host
|
||||
path=$(ssh -o 'Batchmode yes' \
|
||||
$userhost pwd 2>/dev/null)
|
||||
fi
|
||||
# escape spaces; remove executables, aliases, pipes
|
||||
# and sockets; add space at end of file names
|
||||
COMPREPLY=( $( ssh -o 'Batchmode yes' $userhost \
|
||||
command ls -aF1d "$path*" 2>/dev/null | \
|
||||
sed -e 's/ /\\\\\\\ /g' -e 's/[*@|=]$//g' \
|
||||
-e 's/[^\/]$/& /g' ) )
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
_known_hosts -c -a
|
||||
_filedir
|
||||
;;
|
||||
esac
|
||||
|
||||
return 0
|
||||
} &&
|
||||
complete -F _rsync $nospace $filenames rsync
|
||||
|
||||
# Linux route(8) completion
|
||||
#
|
||||
[ $UNAME = Linux ] &&
|
||||
|
95
contrib/rsync
Normal file
95
contrib/rsync
Normal file
@ -0,0 +1,95 @@
|
||||
# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*-
|
||||
# ex: ts=8 sw=8 noet filetype=sh
|
||||
#
|
||||
# bash completion for rsync
|
||||
|
||||
have rsync &&
|
||||
_rsync()
|
||||
{
|
||||
local cur prev shell i userhost path
|
||||
|
||||
COMPREPLY=()
|
||||
cur=`_get_cword`
|
||||
prev=${COMP_WORDS[COMP_CWORD-1]}
|
||||
|
||||
_expand || return 0
|
||||
|
||||
case "$prev" in
|
||||
--@(config|password-file|include-from|exclude-from))
|
||||
_filedir
|
||||
return 0
|
||||
;;
|
||||
-@(T|-temp-dir|-compare-dest))
|
||||
_filedir -d
|
||||
return 0
|
||||
;;
|
||||
-@(e|-rsh))
|
||||
COMPREPLY=( $( compgen -W 'rsh ssh' -- $cur ) )
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$cur" in
|
||||
-*)
|
||||
COMPREPLY=( $( compgen -W '-v -q -c -a -r -R -b -u -l -L -H \
|
||||
-p -o -g -D -t -S -n -W -x -B -e -C -I -T -P \
|
||||
-z -h -4 -6 --verbose --quiet --checksum \
|
||||
--archive --recursive --relative --backup \
|
||||
--backup-dir --suffix= --update --links \
|
||||
--copy-links --copy-unsafe-links --safe-links \
|
||||
--hard-links --perms --owner --group --devices\
|
||||
--times --sparse --dry-run --whole-file \
|
||||
--no-whole-file --one-file-system \
|
||||
--block-size= --rsh= --rsync-path= \
|
||||
--cvs-exclude --existing --ignore-existing \
|
||||
--delete --delete-excluded --delete-after \
|
||||
--ignore-errors --max-delete= --partial \
|
||||
--force --numeric-ids --timeout= \
|
||||
--ignore-times --size-only --modify-window= \
|
||||
--temp-dir= --compare-dest= --compress \
|
||||
--exclude= --exclude-from= --include= \
|
||||
--include-from= --version --daemon --no-detach\
|
||||
--address= --config= --port= --blocking-io \
|
||||
--no-blocking-io --stats --progress \
|
||||
--log-format= --password-file= --bwlimit= \
|
||||
--write-batch= --read-batch= --help' -- $cur ))
|
||||
;;
|
||||
*:*)
|
||||
# find which remote shell is used
|
||||
shell=ssh
|
||||
for (( i=1; i < COMP_CWORD; i++ )); do
|
||||
if [[ "${COMP_WORDS[i]}" == -@(e|-rsh) ]]; then
|
||||
shell=${COMP_WORDS[i+1]}
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [[ "$shell" == ssh ]]; then
|
||||
# remove backslash escape from :
|
||||
cur=${cur/\\:/:}
|
||||
userhost=${cur%%?(\\):*}
|
||||
path=${cur#*:}
|
||||
# unescape spaces
|
||||
path=${path//\\\\\\\\ / }
|
||||
if [ -z "$path" ]; then
|
||||
# default to home dir of specified
|
||||
# user on remote host
|
||||
path=$(ssh -o 'Batchmode yes' \
|
||||
$userhost pwd 2>/dev/null)
|
||||
fi
|
||||
# escape spaces; remove executables, aliases, pipes
|
||||
# and sockets; add space at end of file names
|
||||
COMPREPLY=( $( ssh -o 'Batchmode yes' $userhost \
|
||||
command ls -aF1d "$path*" 2>/dev/null | \
|
||||
sed -e 's/ /\\\\\\\ /g' -e 's/[*@|=]$//g' \
|
||||
-e 's/[^\/]$/& /g' ) )
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
_known_hosts -c -a
|
||||
_filedir
|
||||
;;
|
||||
esac
|
||||
|
||||
return 0
|
||||
} &&
|
||||
complete -F _rsync $nospace $filenames rsync
|
Loading…
x
Reference in New Issue
Block a user