Next: , Previous: Contents, Up: Finding Files



2.9 Directories

Here is how to control which directories find searches, and how it searches them. These two options allow you to process a horizontal slice of a directory tree.

— Option: -maxdepth levels

Descend at most levels (a non-negative integer) levels of directories below the command line arguments. -maxdepth 0 means only apply the tests and actions to the command line arguments.

— Option: -mindepth levels

Do not apply any tests or actions at levels less than levels (a non-negative integer). -mindepth 1 means process all files except the command line arguments.

— Option: -depth

Process each directory's contents before the directory itself. Doing this is a good idea when producing lists of files to archive with cpio or tar. If a directory does not have write permission for its owner, its contents can still be restored from the archive since the directory's permissions are restored after its contents.

— Option: -d

This is a deprecated synonym for -depth, for compatibility with Mac OS X, FreeBSD and OpenBSD. The -depth option is a POSIX feature, so it is better to use that.

— Action: -prune

If the file is a directory, do not descend into it. The result is true. For example, to skip the directory src/emacs and all files and directories under it, and print the names of the other files found:

          find . -wholename './src/emacs' -prune -o -print
     

The above command will not print ./src/emacs among its list of results. This however is not due to the effect of the -prune action (which only prevents further descent, it doesn't make sure we ignore that item). Instead, this effect is due to the use of -o. Since the left hand side of the “or” condition has succeeded for ./src/emacs, it is not necessary to evaluate the right-hand-side (-print) at all for this particular file. If you wanted to print that directory name you could use either an extra -print action:

          find . -wholename './src/emacs' -prune -print -o -print
     

or use the comma operator:

          find . -wholename './src/emacs' -prune , -print
     

If the -depth option is in effect, the subdirectories will have already been visited in any case. Hence -prune has no effect and returns false.

— Action: -quit

Exit immediately (with return value zero if no errors have occurred). No child processes will be left running, but no more paths specified on the command line will be processed. For example, find /tmp/foo /tmp/bar -print -quit will print only /tmp/foo.

— Option: -noleaf

Do not optimize by assuming that directories contain 2 fewer subdirectories than their hard link count. This option is needed when searching filesystems that do not follow the Unix directory-link convention, such as CD-ROM or MS-DOS filesystems or AFS volume mount points. Each directory on a normal Unix filesystem has at least 2 hard links: its name and its . entry. Additionally, its subdirectories (if any) each have a .. entry linked to that directory. When find is examining a directory, after it has statted 2 fewer subdirectories than the directory's link count, it knows that the rest of the entries in the directory are non-directories (leaf files in the directory tree). If only the files' names need to be examined, there is no need to stat them; this gives a significant increase in search speed.

— Option: -ignore_readdir_race

If a file disappears after its name has been read from a directory but before find gets around to examining the file with stat, don't issue an error message. If you don't specify this option, an error message will be issued. This option can be useful in system scripts (cron scripts, for example) that examine areas of the filesystem that change frequently (mail queues, temporary directories, and so forth), because this scenario is common for those sorts of directories. Completely silencing error messages from find is undesirable, so this option neatly solves the problem. There is no way to search one part of the filesystem with this option on and part of it with this option off, though.

— Option: -noignore_readdir_race

This option reverses the effect of the -ignore_readdir_race option.