binfind - Search for executable files based from PATH variable.
I've been using this utility quite long enough already. I use this to search for executable files based from the path values saved in the PATH variable.
Get the updated version of this script here.
Code:
#!/bin/bash shopt -s extglob function main { # check bash version [[ BASH_VERSINFO -ge 3 ]] || { echo "This script requires bash version 3.0 or newer." return 1 } # check arguments [[ $# -eq 0 || "$1" == "-h" || "$1" == "--help" ]] && { echo "usage: binfind <partstring> [partstring2, ...]" return 1 } # prepare patterns local A local -a IPATTERNS=(-iname "*$1*") for A in "${@:2}"; do IPATTERNS=("${IPATTERNS[@]}" -and -iname "*$A*") done # prepare paths local IFS=: read -r -a PATHS <<< "$PATH" # make list unique local -a T=("${!PATHS[@]}") local -i I=0 J C=${#T[@]} D=0 for (( ; I < C; ++I )); do for (( J = I + 1; J < C; ++J )); do [[ ${PATHS[T[I]]} = "${PATHS[T[J]]}" ]] && { unset PATHS\[T\[J\]\] T\[J\] (( ++D )) } done [[ D -gt 0 ]] && { T=("${T[@]:I + 1}") (( C -= D + I + 1, I = -1, D = 0 )) } done # remove unusable entries for I in "${!PATHS[@]}"; do [[ "${PATHS[I]}" == @(|+([[:blank:]])) ]] && unset 'PATHS[I]' done # find [[ ${#PATHS[@]} -gt 0 ]] && find "${PATHS[@]}" -maxdepth 1 -xtype f "${IPATTERNS[@]}" 2>/dev/null } main "$@"
Total Comments 0