Table of Contents

Ubuntu - Bash - Scripts - tgrep

tgrep searches for character strings in each file, in a file tree.


Usage

tgrep [-c|-h] string [file ...]

Code

#!/bin/bash
#
# @(#) tgrep v1.0  Search for a string in a tree.
 
OPT=""
 
for ARG in $@
do
  if [ "`echo $ARG|cut -c1`" = "-" ]
  then case $ARG in
    -c)  OPT="-name \"*.c\""
         shift;;
    -h)  OPT="-name \"*.h\""
         shift;;
    *)   echo "$O: incorrect argument"             >&2
         echo "usage: $O [-c|-h] string [file ...] >&2
         exit 1;;
  esac
  fi
done
 
case $# in
  0)  echo "$O: argument error"                 >&2
      echo "usage: $O [-c|-h] string [dir ...]" >&2
      exit 2
      ;;
  1)  while read FILE
      do
        grep -y "$1" $FILE /dev/nul
      done
      ;;
  *)  STRING=$1; shift
      eval find "$@" -type f $OPT -print | sort | while read FILE
      do
        grep -y "$STRING" $FILE /dev/null
      done
      ;;
esac

Example Usage

tgrep "profanity" /
tgrep unix $HOME
tgrep -c "^sleep()$" $HOME/src
find /usr/src -name "*.c" -print | tgrep "ioctl"
tgrep "| more" `find . -type f -print`
tgrep trap /bin /usr/bin /etc
grep "$1" `find "$2" -print`

and

find "$2" -print | while read F
do
  grep "$1" $F
done