These are some bash functions that I have written over the years. In particular, I find srcfind and txtfind to be very handy in my work. I hope that you do as well.
(for example: srcfind /usr/src | xargs grep SOME_CONSTANT txtfind /etc | xargs grep -i dhcp ) I've distributed these to this list before, but recently I hacked together "dostxtfind", which I had a need for. Enjoy! --kevin # Author: kevin d. clark (alumni.unh.edu!kdc) srcfind () { if [ $# -eq 0 ] ; then srcfind . else find "[EMAIL PROTECTED]" \( -name \*.c \ -o -name \*.cc \ -o -name \*.h \ -o -name \*.hh \ -o -name \*.java \ -o -name \*.c++ \ -o -name \*.el \ \) -print fi } writeablesrcfind () { if [ $# -eq 0 ] ; then writeablesrcfind . else find "[EMAIL PROTECTED]" \( -name \*.c \ -o -name \*.cc \ -o -name \*.h \ -o -name \*.hh \ -o -name \*.java \ -o -name \*.c++ \ -o -name \*.el \ \) \ -exec test -w {} \; \ -print fi } # files that are relevant to our build buildfind () { if [ $# -eq 0 ] ; then buildfind . else find "[EMAIL PROTECTED]" \( -name \*.c \ -o -name \*.cc \ -o -name \*.h \ -o -name \*.java \ -o -name \*.c++ \ -o -name Makefile \ \) -print fi } # files that are relevant to our build newerbuildfind () { if [ $# -lt 1 ] ; then echo Usage: newerbuildfind file-with-timestamp directory1 directory2 ... elif [ $# -lt 2 ] ; then file_with_timestamp=$1 ; shift newerbuildfind "$file_with_timestamp" . else file_with_timestamp=$1 ; shift find "[EMAIL PROTECTED]" -newer $file_with_timestamp \ \( -name \*.c \ -o -name \*.cc \ -o -name \*.h \ -o -name \*.java \ -o -name \*.c++ \ -o -name Makefile \ \) -print fi } # files that are relevant to our build writablebuildfind () { if [ $# -eq 0 ] ; then echo Usage: writablebuildfind directory1 directory2 ... else find "[EMAIL PROTECTED]" \( -name \*.c \ -o -name \*.cc \ -o -name \*.h \ -o -name \*.java \ -o -name \*.c++ \ -o -name Makefile \ \) \ -exec test -w {} \; \ -print fi } # Finds text files in the specified directories. These use Perl's -T and -B # tests. Here's some relevant documentation from the perlfunc page: # # The "-T" and "-B" switches work as follows. The first block or # so of the file is examined for odd characters such as strange # control codes or characters with the high bit set. If too many # strange characters (>30%) are found, it's a "-B" file, other- # wise it's a "-T" file. Also, any file containing null in the # first block is considered a binary file. [....] Both "-T" and # "-B" return true on a null file... # # Caveat programmer. # # Find text files txtfind () { if [ $# -eq 0 ] ; then txtfind . else perl -MFile::Find -e 'find(sub{print "$File::Find::name\n" if (-f && -T);}, @ARGV);' "[EMAIL PROTECTED]" fi } # Find DOS-formatted text files dostxtfind () { if [ $# -eq 0 ] ; then dostxtfind . else perl -MFile::Find -e 'find(sub{ $crlf = 0; if (($f = -f) && ($T = -T)) { @ARGV=($_); binmode(ARGV); (/\r\n/ && $crlf++) while(<>); } print "$File::Find::name\n" if ($f && $T && $crlf); }, @ARGV)' "[EMAIL PROTECTED]" fi } # Find binary files binfind () { if [ $# -eq 0 ] ; then binfind . else perl -MFile::Find -e 'find(sub{print "$File::Find::name\n" if (-f && -B);}, @ARGV);' "[EMAIL PROTECTED]" fi } cfind () { if [ $# -eq 0 ] ; then cfind . else find "[EMAIL PROTECTED]" \( -name \*.c \ -o -name \*.cc \ -o -name \*.c++ \ \) -print fi } hfind () { if [ $# -eq 0 ] ; then hfind . else find "[EMAIL PROTECTED]" \( -name \*.h \ \) -print fi } jfind () { if [ $# -eq 0 ] ; then jfind . else find "[EMAIL PROTECTED]" \( -name \*.java \ \) -print fi } elfind () { if [ $# -eq 0 ] ; then elfind . else find "[EMAIL PROTECTED]" \( -name \*.el \ \) -print fi } bakfind () { if [ $# -eq 0 ] ; then bakfind . else find "[EMAIL PROTECTED]" \( -name \*.bak \ \) -print fi } classfind () { if [ $# -eq 0 ] ; then classfind . else find "[EMAIL PROTECTED]" \( -name \*.class \ \) -print fi } xmlfind () { if [ $# -eq 0 ] ; then xmlfind . else find "[EMAIL PROTECTED]" \( -name \*.xml \ \) -print fi } writeablefind () { if [ $# -eq 0 ] ; then writeablefind . else perl -MFile::Find -e 'find(sub{print "$File::Find::name\n" if (-f && -w);}, @ARGV);' "[EMAIL PROTECTED]" fi } readonlyfind () { if [ $# -eq 0 ] ; then readonlyfind . else perl -MFile::Find -e 'find(sub{print "$File::Find::name\n" if (-f && ! -w);}, @ARGV);' "[EMAIL PROTECTED]" fi } # Finds all files and directories newer than a given file newerfind () { if [ $# -lt 1 ] ; then echo Usage: newerfind file-with-timestamp directory1 directory2 ... elif [ $# -lt 2 ] ; then file_with_timestamp=$1 ; shift newerfind "$file_with_timestamp" . else file_with_timestamp=$1 ; shift perl -MFile::Find -e '$f = shift; find(sub{print "$File::Find::name\n" if (-M $file_with_timestamp > -M);}, @ARGV);' "[EMAIL PROTECTED]" fi } -- GnuPG ID: B280F24E And the madness of the crowd alumni.unh.edu!kdc Is an epileptic fit -- Tom Waits _______________________________________________ gnhlug-discuss mailing list [EMAIL PROTECTED] http://mail.gnhlug.org/mailman/listinfo/gnhlug-discuss