---
name: "ffindcmd"
section: "1"
platform: "linux"
package: "fsp"
version: "2.81.b24-3"
release: "Debian 5.0 (Lenny)"
platforms: ["linux"]
url: "https://new.carta.tech/ffindcmd"
---

# ffindcmd(1)

find files by name or by other characteristics in FSP database

## NAME

ffindcmd, ffind - find files by name or by other characteristics in FSP database

## SYNOPSIS

**ffindcmd** *pathname-list expression*\
 **ffind** *pathname-list expression*

## DESCRIPTION

**ffindcmd** recursively descends the directory hierarchy for each  pathname in the  *pathname-list*, seeking files that match a logical *expression* written using the operators listed below.

## USAGE

### Operators

In the descriptions, the argument  *n* is used as a decimal integer where  **+***n* means more than  *n*, **-***n* means less than  *n*, and  *n* means exactly *n*. All three maybe used if an integer argument is needed.

- **-name** *filename*

  *True if the*  *filename* argument matches the current file name. Shell argument syntax can be used if escaped (watch out for **\[**,  **?** and  **\***).

- **-prune**

  Always yields true.  Has the side effect of pruning the search tree at the file.  That is, if the current path name is a directory, **ffindcmd** will not descend into that directory.

- **-type** *c*

  True if the type of the file is  *c*, where  *c* is one of:

  - **d**

    for directory

  - **f**

    for plain file

- **-size** *n*

  True if the file is  *n* blocks long (512 bytes per block). If *n* is followed by a **c**, the size is in characters.

- **-time** *n*

  True if the file has been accessed/modified/changed in  *n* days.

- **-exec** *command*

  True if the executed  *command* returns a zero value as exit status. The end of  *command* must be punctuated by an escaped semicolon. A command argument  **{}** is replaced by the current pathname.

- **-ok** *command*

  Like **-exec** except that the generated command is written on the standard output, then the standard input is read and the command executed only upon response **y**.

- **-print**

  Always true; the current pathname is printed.

- **-ls**

  Always true; prints current pathname together with its associated statistics. These include size in blocks (512 bytes), protection mode, number of hard links, user, group, size in bytes, and modification time.\
   Note: formatting is done internally, without executing the **fls** program.

- **-newer** *file*

  True if the current file has been modified more recently than the argument  *filename*.

- **(***expression***)**

  True if the parenthesized  *expression* is true.\
   Note: Parentheses are special to the shell and must be escaped.

- **!***primary*

  True if the  *primary* is false  (**!** is the unary  *not* operator).

*primary1* \[ **-a** \] *primary2*\
 True if both  *primary1* and  *primary2* are true. The  **-a** is not required.  It is implied by the juxtaposition of two  primaries.

*primary1* **-o** *primary2*\
 True if either  *primary1* or  *primary2* is true (**-o** is the *or* operator).

**ffindcmd** will perform **csh** file name globbing based on file and directory information obtained from the FSP database.

Since user's command shells generally cannot do the proper globbing for this program, it is recommended that user defines a shell alias or function to turn off command shell globbing before running this program. **csh** example:

```
alias ffind \(set noglob\; exec ffindcmd \!\*\)
```

## EXAMPLE

To find all the files called  **intro.ms** starting from the current directory:

```
example% ffind . -name intro.ms -print
./manuals/assembler/intro.ms
./manuals/sun.core/intro.ms
./manuals/driver.tut/intro.ms
./manuals/sys.manager/uucp.impl/intro.ms
./supplements/general.works/unix.introduction/intro.ms
./supplements/programming.tools/sccs/intro.ms
example%
```

To recursively print all files names in the current directory and below, but skipping  SCCS directories:

```
example% ffind . -name SCCS -prune -o -print
example%
```

To recursively print all files names in the current directory and below, skipping the contents of SCCS directories, but printing out the SCCS directory name:

```
example% ffind . -print -name SCCS -prune
example%
```

To remove files named **a.out** or **\*.o** that have not been accessed for a week or more

```
example% ffind . \( -name a.out -o -name *.o \) -time +7 -exec frm {} \;
```

## ENVIRONMENT

See [fsp\_env(7)](/fsp_env/7.md) for list of used environment variables.

## SEE ALSO

[fcatcmd(1)](/fcatcmd/1.md), [fcdcmd(1)](/fcdcmd/1.md), [fgetcmd(1)](/fgetcmd/1.md), [fgrabcmd(1)](/fgrabcmd/1.md), [flscmd(1)](/flscmd/1.md), [fmkdir(1)](/fmkdir/1.md), [fprocmd(1)](/fprocmd/1.md), [fput(1)](/fput/1.md), [frmcmd(1)](/frmcmd/1.md), [frmdircmd(1)](/frmdircmd/1.md), [fver(1)](/fver/1.md), [fducmd(1)](/fducmd/1.md), [fhostcmd(1)](/fhostcmd/1.md), [ffindcmd(1)](/ffindcmd/1.md), [fspd(1)](/fspd/1.md), [fsp\_prof(5)](/fsp_prof/5.md)

## BUGS

There seems to be a problem using an alias as command to execute. But since there is no globbing performed on the pathname the original FSP commands may be used instead.
