Skip to content

Instantly share code, notes, and snippets.

@chuckg
Created November 9, 2010 19:20
Show Gist options
  • Save chuckg/669632 to your computer and use it in GitHub Desktop.
Save chuckg/669632 to your computer and use it in GitHub Desktop.
#!/bin/bash
# Copyright 2004 Ben Reser <ben@reser.org>
# Licensed under the terms subversion ships under or GPLv2.
# Useful for greping in a subversion working copy.
# Essentially it behaves the same way your grep command does (in fact it
# ultimately calls the grep command on your path) with a few exceptions.
# Ignores the subversion admin directories (.svn) and vi(m) backup files.
# Recursive is always on with or without -r.
# Always print filename and line numbers.
# Ignores binary files.
# If no path is given the current working directory is searched not stdin.
# Other than that it will take any parameter or pattern your standard grep
# does.
# This script requires GNU findutils and by default GNU grep (though that
# can be changed with environment variables).
#
# Modifications to the original:
# - Modified for use on OSX (use gfind found on Macports) and egrep
# - Added switch to color always
# - Added .git to the hardcoded ignores
#
# There are three environment variables you can set that modify the default
# behavior:
#
# WCGREP_GREP Controls what command is used for the grep command.
# If unset or null wcgrep will use the command named grep.
# WCGREP_GREPARGS Controls what arguments are always passed to the grep
# command before the arguments given on the command line.
# If unset or null it defaults to -HnI (always print file
# names, line numbers and ignore binary files). If you wish
# to set no default args set the variable to a space (" ").
# WCGREP_IGNORE Controls what files are ignored by the grep command.
# This is a regex that is passed to the find command with
# -regex so see find's man page for details. If unset or
# null defaults to '.*~$\|.*/\.svn\(/\|$\)', which will
# ignore vim backup files and subversion admin dirs.
arg_count=$#
for (( i=1; i <= $arg_count; i++ )); do
arg="$1"
shift 1
if [ -z "$pattern" ]; then
if [ "$arg" == "--" ]; then
grepargs="$grepargs $arg"
pattern="$1"
shift 1
((i++))
elif [ "${arg:0:1}" != "-" ]; then
pattern="$arg"
else
grepargs="$grepargs $arg"
fi
else
pathargs="$pathargs $arg"
fi
done
gfind $pathargs -regex ${WCGREP_IGNORE:-'.*~$\|\.\/\.git\|.*/\.svn\(/\|$\)'} -prune -o \
-type f -print0 | gxargs -r0 ${WCGREP_GREP:-egrep} ${WCGREP_GREPARGS:--HnI --color=always} \
$grepargs "$pattern"
@breser
Copy link

breser commented Dec 31, 2010

If you didn't remove the copyright statement you might remember where you got it from. The original minus the additions for .git and other files you want to ignore, the color always flag and switching to using gfind and egrep is here:
http://svn.apache.org/viewvc/subversion/trunk/contrib/client-side/wcgrep?revision=877789&view=markup

Both licenses you have as an option to use require that you include the copyright notice.

Please fix this.

@chuckg
Copy link
Author

chuckg commented Dec 31, 2010

Hello breser, spending your time on github searching for wcgrep thieves!? :)

Sorry, I didn't remove anything from the script. I received it second hand from someone at a previous job and I modified it for my purposes and posted it here so it would be lost if I had some disk failure. No foul play intended! I've added back your original copyright and license and added a note about what I changed. Cheers.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment