Findwild User Guide v. 1.2
Introduction
Findwild is (yet another) program to search for files, but it works differently.
Findwild offers the following search criteria:

- directory path to search, with multiple wildcards placed anywhere
- file name(s) to search for, with multiple wildcards anywhere
- file name(s) to exclude, with multiple wildcards anywhere
- file content string(s) to search for, with multiple wildcards anywhere
- file content string(s) to exclude, with multiple wildcards anywhere
- file modification date within a desired range
- your choice of delimiters that define the file strings to be searched (defaults provided)
- search the list of files produced by a previous search

Findwild is especially useful for programmers needing to search for symbolic names. The search criteria can be tuned to narrow the search by excluding unwanted paths, files, and strings found by an initial search. Combinations of wanted and unwanted strings can be specified at the file and record level. A new search can be initiated using the results from a prior search to speed things up.
License and Warranty
Findwild is a free program licensed under the GNU General Public License, Version 3 (from the Free Software Foundation). Findwild is not warranted for any purpose whatsoever, but if you find a bug, I will try to fix it.
Origin and Contact
Findwild originates from the author's web site at: http://kornelix.squarespace.com/findwild
Other web sites may offer it for download. Modifications may have been made.
If you have questions, suggestions or a bug to report: kornelix@yahoo.de
Screenshot
Findwild usage
Refer to the above screenshot as needed to better understand the following.
The toolbar [search] button starts a dialog where you enter search criteria. You can use wildcards * and ? in all search criteria. * matches any string, including a zero length string, and ? matches any single character. You can make multiple entries for search and ignore files and strings, separated with blanks. If desired, enter a date range using either days ago (-9999 to 0) or yyyy-mm-dd. When done, use [search all] to begin the search.
Findwild selects and reports files according to the following rules:

- find all files matching the search path and any search file
- discard files not having a modification date within the specified range
- if file name matches any ignore file, discard the file
- read these files and find all search strings and ignore strings
- discard files not matching the chosen "find files containing" option:

- contain any of the given search strings
- (or) contain all of the given search strings

- (or) contain all of them within the same record

- discard files matching the chosen "ignore files containing" option:

- contains any of the given ignore strings
- (or) contains all of the given ignore strings

- (or) contains all of them in the same record

- cancel matching records meeting "ignore matching records" condition:

- matching record has any ignore string

- (or) matching record has all ignore strings

- if all matching records are canceled, then the file is discarded

Wildcard file names used for searching are made from search path + search file(s).
If this results in ** where they are joined, then * is substituted.
Example: search path = /usr/include/* and search file = *.h
This will result in a combined search string of /usr/include/*.h which will include files such as /usr/include/err.h and /usr/include/gtk-2.0/gdk/gdkgc.h (* matches all intermediate directories).
The search file(s) may also include subdirectories, e.g. /usr/include/* and */gtk*/*.h is a legitimate combination that will search all files named *.h within /usr/include and within any intermediate directory beginning with gtk.
Delimiters define and separate strings in the searched files. Each file string, so defined, will be matched against the search and ignore strings. If you use no delimiters, then each file record (row of text) is treated as one string for matching.
Note that wildcards are needed to make findwild work like other file search programs. A record containing the string xxx#aaabbbbcc@yyy will not match abbb but will match *abbb* and a*bcc (assuming that '#' and '@' are included in the delimiters list).
It makes no sense to include a delimiter character in the search string. If you need to search for strings containing any of the default delimiters, then remove these delimiters for this search. The default delimiters work as needed for most cases.
If list matching records is checked, the output includes all records with matching strings. Otherwise only file names are reported along with the count of matching records.
The toolbar [save] button saves the search results to a file. [print] prints them on the default printer. [clear] clears the output window. [kill] stops a running search.
The button [search hits] uses the list of files found by the previous search instead of using the search path and file inputs. If you are narrowing the search criteria to home in on the desired files, this can speed things up.
The search criteria can be saved to a file with the [save file] button, and reloaded later with the [load file] button, after which it can be edited as needed.
Note on file types
It would be logical to automatically exclude non-text files from the search. It takes time to reliably determine if a file is a text file. I experimented and concluded that it is usually faster to simply process all files. This could produce meaningless accidental search string matches for binary files. It is better to specify file types in the search criteria, e.g. *.txt, *.html, etc.