summaryrefslogtreecommitdiff
path: root/completions/find
diff options
context:
space:
mode:
Diffstat (limited to 'completions/find')
-rw-r--r--completions/find122
1 files changed, 122 insertions, 0 deletions
diff --git a/completions/find b/completions/find
new file mode 100644
index 00000000..1d3a2822
--- /dev/null
+++ b/completions/find
@@ -0,0 +1,122 @@
+# bash completion for GNU find. This makes heavy use of ksh style extended
+# globs and contains Linux specific code for completing the parameter
+# to the -fstype option.
+
+_find()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -maxdepth|-mindepth)
+ COMPREPLY=( $( compgen -W '{0..9}' -- "$cur" ) )
+ return 0
+ ;;
+ -newer|-anewer|-cnewer|-fls|-fprint|-fprint0|-fprintf|-name|-iname|\
+ -lname|-ilname|-wholename|-iwholename|-samefile)
+ _filedir
+ return 0
+ ;;
+ -fstype)
+ _fstypes
+ [[ $OSTYPE == *bsd* ]] && \
+ COMPREPLY+=( $( compgen -W 'local rdonly' -- "$cur" ) )
+ return 0
+ ;;
+ -gid)
+ _gids
+ return 0
+ ;;
+ -group)
+ COMPREPLY=( $( compgen -g -- "$cur" 2>/dev/null) )
+ return 0
+ ;;
+ -xtype|-type)
+ COMPREPLY=( $( compgen -W 'b c d p f l s' -- "$cur" ) )
+ return 0
+ ;;
+ -uid)
+ _uids
+ return 0
+ ;;
+ -user)
+ COMPREPLY=( $( compgen -u -- "$cur" ) )
+ return 0
+ ;;
+ -exec|-execdir|-ok|-okdir)
+ words=(words[0] "$cur")
+ cword=1
+ _command
+ return 0
+ ;;
+ -[acm]min|-[acm]time|-iname|-lname|-wholename|-iwholename|-lwholename|\
+ -ilwholename|-inum|-path|-ipath|-regex|-iregex|-links|-perm|-size|\
+ -used|-printf|-context)
+ # do nothing, just wait for a parameter to be given
+ return 0
+ ;;
+ -regextype)
+ COMPREPLY=( $( compgen -W 'emacs posix-awk posix-basic \
+ posix-egrep posix-extended' -- "$cur" ) )
+ return 0
+ ;;
+ esac
+
+ _expand || return 0
+
+ local i exprfound=false
+ # set exprfound to true if there is already an expression present
+ for i in ${words[@]}; do
+ [[ "$i" = [-\(\),\!]* ]] && exprfound=true && break
+ done
+
+ # handle case where first parameter is not a dash option
+ if ! $exprfound && [[ "$cur" != [-\(\),\!]* ]]; then
+ _filedir -d
+ return 0
+ fi
+
+ # complete using basic options
+ COMPREPLY=( $( compgen -W '-daystart -depth -follow -help \
+ -ignore_readdir_race -maxdepth -mindepth -mindepth -mount \
+ -noignore_readdir_race -noleaf -regextype -version -warn -nowarn \
+ -xdev \
+ -amin -anewer -atime -cmin -cnewer -ctime -empty -executable -false \
+ -fstype -gid -group -ilname -iname -inum -ipath -iregex -iwholename \
+ -links -lname -mmin -mtime -name -newer -nogroup -nouser -path -perm \
+ -readable -regex -samefile -size -true -type -uid -used -user \
+ -wholename -writable -xtype -context \
+ -delete -exec -execdir -fls -fprint -fprint0 -fprintf -ls -ok -okdir \
+ -print -print0 -printf -prune -quit' -- "$cur" ) )
+
+ if [[ ${#COMPREPLY[@]} -ne 0 ]]; then
+ # this removes any options from the list of completions that have
+ # already been specified somewhere on the command line, as long as
+ # these options can only be used once (in a word, "options", in
+ # opposition to "tests" and "actions", as in the find(1) manpage).
+ local -A onlyonce=( [-daystart]=1 [-depth]=1 [-follow]=1 [-help]=1
+ [-ignore_readdir_race]=1 [-maxdepth]=1 [-mindepth]=1 [-mount]=1
+ [-noignore_readdir_race]=1 [-noleaf]=1 [-nowarn]=1 [-regextype]=1
+ [-version]=1 [-warn]=1 [-xdev]=1 )
+ local j
+ for i in "${words[@]}"; do
+ [[ $i && ${onlyonce[$i]} ]] || continue
+ for j in ${!COMPREPLY[@]}; do
+ [[ ${COMPREPLY[j]} == $i ]] && unset COMPREPLY[j]
+ done
+ done
+ fi
+
+ _filedir
+
+ return 0
+} &&
+complete -F _find find
+
+# 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