findf: Dark Elf Software find file utility.  Version 1.1.1

Written by Erast V. Kunenkov. Copyright(C): Dark Elf Software, 1997-1999, 2003


1. What is it?

findf is a powerfull command-line utility allowing you:
1. to make customized search through local file system or remote ftp server,
   including substring matching search (case sensitive or not), and
2. to make everything with files you have found.

For example, you may find in your hard drive all files containing substring
"My Program" and add it into a single archive, or download all zip archives
from a ftp site.


2. Supported platforms

* OS/2
* DOS
* Win32 (Windows 9x+/NT/2k/XP)
* FreeBSD (early alpha version)


3. Usage

findf [<option> | <mask> [ <option> | <mask> [ <option> | <mask> [ ... ]]]]

Invoked without arguments, findf prints a listing of current directory.
See section 5 (Output Format) for details.

Valid options are:

-a<r|w|x|h|s|a|p>
               Enables scanning files with specified attributes

               Attributes are defined as follows:
               r	file could be read
               w	file could be apppended, overwritten or deleted
               x	file could be executed
               h	file is hidden (not supported under *nix)
               s	file is system (not supported under *nix)
               a	file was archived (not supported under *nix)
               p	file is compressed (only zip archives are reported now)
               e	file has extended attributes (OS/2 version only)

               Specifing an attribute in upper case means don't find files
               with target attributes.

               Examples:

               findf -aX
                find all non-executable files in current directory

               findf -ad
                find all subdirectories in current directory

               findf -ahs
                find all hidden or system files in current directory

-d <path>      Directs searching into specified path
               findf separates the search path from the mask; so, you may not
               specify masks like /my_directory/*.c; you have to use

               findf -d /my_directory *.c

               instead. The reason for it is to allow you to make search with
               the same set of masks in a number of directories.

               Example:

               findf -d mydir1 -d mydir2 -d your_dir *.c *.h
                find all files with .c or .h extensions in directories
                mydir1, mydir2 or mydir3.

-dm <mask>     Defines mask for searching directories name
               This may be useful with recursive directories search
               (see -r option description).
               Example:

               findf -dm *my* -r *.c *.h
                find all files with .c or .h extensions in directories
                containing substring "my" or in its subdirectories.

-f             Finds first file and exit

-h             Shows help with a brief options summary

-i	       Search in index files (*index*,files*,dirinfo* - for ftp, etc.)
               This option is absolutely equal to

               findf *index* files* dirinfo* ... (other options and masks)

-m <mask>      (default) Defines mask for file name (the default mask is *)
               Obsolete but still supported for the compatibility with
               previous versions.

-q             Display file names and paths only
               Produces output in a simplified form.

-qq            Quietest mode, display errors only (for using with -x, -xd)
               Never file name nor paths will be displayed.

-p[l]          Pause after each [last] output page
               Note what findf doesn't includes a real pager - so, this option
               may cause incorrect results with -x or -xd options or in systems
               with text display size other than 80x25.

-r             Enables subdirectories recursing
               Search on all subdirectories appears in any directories findf
               search in.

-s <string>    Defines string which must be contained in searching files
               This string may also contains a wildcard symbols * or ?

-si <string>   The same as -s but ignores letter case
               (including NLS in non-*nix systems)

-x <command>   Executes command for each found file
               _FOUND_, with -x(-xd) means found file (mask). You may also use
               _FOUND_NAME_, _FOUND_DIR_, _FOUND_DRIVE_ and _FOUND_EXT_.
               If you have specified no one of it, _FOUND_NAME_ will be added
               into the end of your command.

               Example:

               findf -r -si "My Program" -x "zip -9 myprogs.zip"
                Archives all files containing substring "My Program" and
                located in current directory or its subdirectories.

               findf -r -s "GNU" -x "zip -9 myprogs.zip"
                Archives all files containing substring "My Program" and
                located in current directory or its subdirectories.

-xd <command>  Executes command for each directory entry containing any found
               files.

               Example:

               findf -d / -r -xd "del *.*"
                Remove all files from your current hard drive.

You are able to define more  than one masks,  strings,  commands  or start
directories. Symbol @ before parameters means to read CR/LF/CRLF-separated
parameters from specified file ( -x @1.cmf, etc.)

4. ftpfs usage

4. Output format

In non-quiet mode, findf displays search result in the following form:

<attributes> <file name> <path>

Attributes will be displayed as follows:
drwxhsape - in place of each letter symbol '-' will be printed if such
attribute isn't set. On *nix system, "rwx" will be displayed for a current
user.


5. License

See license.txt for details.

6. System-dependent limitations

* fsftp is not supported in DOS version
* in *nix version you have to put all masks with wildcard characters
  (* or ?) into quotas (e.g., "*.*" instead of *.*) to prevent command
  processor from wildcard interpreating itself.

Please note that findf interpretation of * is not the same as DOS-like command
processors; for example, *.* doesn't means all files - it means all file with
existing extension. If you want to create a mask for any file, just use
single * instead.

7. Known bugs

Probably infinite; please feel free to send bug reports as described in
bugreports.txt
