mirror of
https://https.git.savannah.gnu.org/git/findutils.git
synced 2026-01-26 15:39:06 +00:00
1196 lines
42 KiB
Groff
1196 lines
42 KiB
Groff
.TH FIND 1 \" -*- nroff -*-
|
|
.SH NAME
|
|
find \- search for files in a directory hierarchy
|
|
.SH SYNOPSIS
|
|
.B find
|
|
[\-H] [\-L] [\-P] [path...] [expression]
|
|
.SH DESCRIPTION
|
|
This manual page
|
|
documents the GNU version of
|
|
.BR find .
|
|
GNU
|
|
.B find
|
|
searches the directory tree rooted at each given file name by
|
|
evaluating the given expression from left to right, according to the
|
|
rules of precedence (see section OPERATORS), until the outcome is
|
|
known (the left hand side is false for \fIand\fR operations, true for
|
|
\fIor\fR), at which point
|
|
.B find
|
|
moves on to the next file name.
|
|
.PP
|
|
If you are using
|
|
.B find
|
|
in an environment where security is important (for example if you are
|
|
using it to seach directories that are writable by other users), you
|
|
should read the "Security Considerations" chapter of the findutils
|
|
documentation, which is called \fBFinding Files\fP and comes with
|
|
findutils. That document also includes a lot more detail
|
|
and discussion than this manual page, so you may find it a more useful
|
|
source of information.
|
|
.SH OPTIONS
|
|
The `\-H', `\-L' and `\-P' options control the treatment of symbolic
|
|
links. Command-line arguments following these are taken to be names
|
|
of files or directories to be examined, up to the first argument that
|
|
begins with `\-', `(', `)', `,', or `!'. That argument and any
|
|
following arguments are taken to be the expression describing what is
|
|
to be searched for. If no paths are given, the current directory is
|
|
used. If no expression is given, the expression `\-print' is used
|
|
(but you should probably consider using `\-print0' instead, anyway).
|
|
.PP
|
|
This manual page talks about `options' within the expression list.
|
|
These options control the behaviour of
|
|
.B find
|
|
but are specified immediately after the last path name. The three
|
|
`real' options `\-H', `\-L' and `\-P' must appear before the first
|
|
path name, if at all.
|
|
.IP \-P
|
|
Never follow symbolic links. This is the default behaviour. When
|
|
.B find
|
|
examines or prints information a file, and the file is a symbolic
|
|
link, the information used shall be taken from the properties of the
|
|
symbolic link itself.
|
|
|
|
.IP \-L
|
|
Follow symbolic links. When
|
|
.B find
|
|
examines or prints information about files, the information used shall
|
|
be taken from the properties of the file to which the link points, not
|
|
from the link itself (unless it is a broken symbolic link or
|
|
.B find
|
|
is unable to examine the file to which the link points). Use of this
|
|
option implies \-noleaf. If you later use the \-P option, \-noleaf
|
|
will still be in effect. If \-L is in effect and
|
|
.B find
|
|
discovers a symbolic link to a subdirectory during its search,
|
|
the subdirectory pointed to by the symbolic link will be searched.
|
|
.IP
|
|
When the \-L option is in effect, the \-type predicate will always
|
|
match against the type of the file that a symbolic link points to
|
|
rather than the link itself (unless the symbolic link is broken).
|
|
Using \-L causes the \-lname and \-ilname predicates always to return
|
|
false.
|
|
|
|
.IP \-H
|
|
Do not follow symbolic links, except while processing the command
|
|
line arguments. When
|
|
.B find
|
|
examines or prints information about files, the information used
|
|
shall be taken from the properties of the symbolic link itself. The
|
|
only exception to this behaviour is when a file specified on the
|
|
command line is a symbolic link, and the link can be resolved. For
|
|
that situation, the information used is taken from whatever the link
|
|
points to (that is, the link is followed). The information about the
|
|
link itself is used as a fallback if the file pointed to by the
|
|
symbolic link cannot be examined. If \-H is in effect and one of the
|
|
paths specified on the command line is a symbolic link to a directory,
|
|
the contents of that directory will be examined (though of course
|
|
\-maxdepth 0 would prevent this).
|
|
.P
|
|
If more than one of \-H, \-L and \-P is specified, each overrides the
|
|
others; the last one appearing on the command line takes effect.
|
|
Since it is the default, the \-P option should be considered to be in
|
|
effect unless either \-H or \-L is specified.
|
|
|
|
GNU
|
|
.B find
|
|
frequently stats files during the processing of the command line
|
|
itself, before any searching has begun. These options also affect how
|
|
those arguments are processed. Specifically, there are a number of
|
|
tests that compare files listed on the command line against a file we
|
|
are currently considering. In each case, the file specified on the
|
|
command line will have been examined and some of its properties will
|
|
have been saved. If the named file is in fact a symbolic link, and
|
|
the \-P option is in effect (or if neither \-H nor \-L were
|
|
specified), the information used for the comparison will be taken from
|
|
the properties of the symbolic link. Otherwise, it will be taken from
|
|
the properties of the file the link points to. If
|
|
.B find
|
|
cannot follow the link (for example because it has insufficient
|
|
privileges or the link points to a nonexistent file) the properties of
|
|
the link itself will be used.
|
|
.P
|
|
When the \-H or \-L options are in effect, any symbolic links listed
|
|
as the argument of \-newer will be dereferenced, and the timestamp
|
|
will be taken from the file to which the symbolic link points. The
|
|
same consideration applies to \-anewer and \-cnewer.
|
|
|
|
The \-follow option has a similar effect to \-L, though it takes
|
|
effect at the point where it appears (that is, if \-L is not used but
|
|
\-follow is, any symbolic links appearing after \-follow on the
|
|
command line will be dereferenced, and those before it will not).
|
|
|
|
.P
|
|
.SH EXPRESSIONS
|
|
The expression is made up of options (which affect overall operation
|
|
rather than the processing of a specific file, and always return
|
|
true), tests (which return a true or false value), and actions (which
|
|
have side effects and return a true or false value), all separated by
|
|
operators. \-and is assumed where the operator is omitted.
|
|
|
|
If the expression contains no actions other than \-prune, \-print is
|
|
performed on all files for which the expression is true.
|
|
|
|
.SS OPTIONS
|
|
.P
|
|
All options always return true. Except for \-follow and \-daystart,
|
|
they always take effect, rather than being processed only when their
|
|
place in the expression is reached. Therefore, for clarity, it is
|
|
best to place them at the beginning of the expression. A warning is
|
|
issued if you don't do this.
|
|
.IP \-daystart
|
|
Measure times (for \-amin, \-atime, \-cmin, \-ctime, \-mmin, and \-mtime)
|
|
from the beginning of today rather than from 24 hours ago. This
|
|
option only affects tests which appear later on the command line.
|
|
.IP \-depth
|
|
Process each directory's contents before the directory itself.
|
|
.IP \-d
|
|
A synonym for \-depth, for compatibility with FreeBSD, NetBSD, MacOS X and OpenBSD.
|
|
.IP \-follow
|
|
Deprecated; use the \-L option instead. Dereference symbolic links.
|
|
Implies \-noleaf. Unless the \-H or \-L option has been specified,
|
|
the position of the \-follow option changes the behaviour of the
|
|
\-newer predicate; any files listed as the argument of \-newer will be
|
|
dereferenced if they are symbolic links. The same consideration
|
|
applies to \-anewer and \-cnewer. Similarly, the \-type predicate
|
|
will always match against the type of the file that a symbolic link
|
|
points to rather than the link itself. Using \-follow causes the
|
|
\-lname and \-ilname predicates always to return false.
|
|
.IP "\-help, \-\-help"
|
|
Print a summary of the command-line usage of
|
|
.B find
|
|
and exit.
|
|
.IP \-ignore_readdir_race
|
|
Normally, \fBfind\fR will emit an error message when it fails to stat a file.
|
|
If you give this option and a file is deleted between the time \fBfind\fR
|
|
reads the name of the file from the directory and the time it tries to stat
|
|
the file, no error message will be issued. This also applies to files
|
|
or directories whose names are given on the command line. This option takes
|
|
effect at the time the command line is read, which means that you cannot search
|
|
one part of the filesystem with this option on and part of it with this option
|
|
off (if you need to do that, you will need to issue two \fBfind\fR commands
|
|
instead, one with the option and one without it).
|
|
.IP "\-maxdepth \fIlevels\fR"
|
|
Descend at most \fIlevels\fR (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.
|
|
.IP "\-mindepth \fIlevels\fR"
|
|
Do not apply any tests or actions at levels less than \fIlevels\fR (a
|
|
non-negative integer). `\-mindepth 1' means process all files except
|
|
the command line arguments.
|
|
.IP \-mount
|
|
Don't descend directories on other filesystems. An alternate name for
|
|
\-xdev, for compatibility with some other versions of
|
|
.BR find .
|
|
.IP \-noignore_readdir_race
|
|
Turns off the effect of \-ignore_readdir_race.
|
|
.IP "\-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
|
|
.B 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.
|
|
.IP "\-regextype \fItype\fR"
|
|
Changes the regular expression syntax understood by
|
|
.B \-regex
|
|
and
|
|
.B -iregex
|
|
tests which occur later on the command line. Currently-implemented
|
|
types are emacs, posix-awk, posix-basic (this is the default),
|
|
posix-egrep and posix-extended.
|
|
|
|
.IP "\-version, \-\-version"
|
|
Print the \fBfind\fR version number and exit.
|
|
.IP "\-warn, \-nowarn"
|
|
Turn warning messages on or off. These warnings apply only to the
|
|
command line usage, not to any conditions that
|
|
.B find
|
|
might encounter when it searches directories. The default behaviour
|
|
corresponds to \-warn if standard input is a tty, and to \-nowarn
|
|
otherwise.
|
|
.IP \-xdev
|
|
Don't descend directories on other filesystems.
|
|
|
|
.SS TESTS
|
|
.P
|
|
Numeric arguments can be specified as
|
|
.IP \fI+n\fP
|
|
for greater than
|
|
.IR n ,
|
|
.IP \fI\-n\fP
|
|
for less than
|
|
.IR n ,
|
|
.IP \fIn\fP
|
|
for exactly
|
|
.IR n .
|
|
.IP "\-amin \fIn\fR"
|
|
File was last accessed \fIn\fR minutes ago.
|
|
.IP "\-anewer \fIfile\fR"
|
|
File was last accessed more recently than \fIfile\fR was modified. If
|
|
\fIfile\fR is a symbolic link and the \-H option or the \-L option is
|
|
in effect, the access time of the file it points to is always
|
|
used.
|
|
.IP "\-atime \fIn\fR"
|
|
File was last accessed \fIn\fR*24 hours ago.
|
|
When find figures out how many 24-hour periods ago the file
|
|
was last accessed, any fractional part is ignored, so to match
|
|
.B \-atime
|
|
.BR +1 ,
|
|
a file has to have been accessed at least
|
|
.I two
|
|
days ago.
|
|
.IP "\-cmin \fIn\fR"
|
|
File's status was last changed \fIn\fR minutes ago.
|
|
.IP "\-cnewer \fIfile\fR"
|
|
File's status was last changed more recently than \fIfile\fR was
|
|
modified. If \fIfile\fR is a symbolic link and the \-H option or the
|
|
\-L option is in effect, the status-change time of the file it points
|
|
to is always used.
|
|
|
|
.IP "\-ctime \fIn\fR"
|
|
File's status was last changed \fIn\fR*24 hours ago.
|
|
See the comments for
|
|
.B \-atime
|
|
to understand how rounding affects the interpretation of file status
|
|
change times.
|
|
.IP \-empty
|
|
File is empty and is either a regular file or a directory.
|
|
.IP \-false
|
|
Always false.
|
|
.IP "\-fstype \fItype\fR"
|
|
File is on a filesystem of type \fItype\fR. The valid filesystem
|
|
types vary among different versions of Unix; an incomplete list of
|
|
filesystem types that are accepted on some version of Unix or another
|
|
is: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. You can use \-printf
|
|
with the %F directive to see the types of your filesystems.
|
|
.IP "\-gid \fIn\fR"
|
|
File's numeric group ID is \fIn\fR.
|
|
.IP "\-group \fIgname\fR"
|
|
File belongs to group \fIgname\fR (numeric group ID allowed).
|
|
.IP "\-ilname \fIpattern\fR"
|
|
Like \-lname, but the match is case insensitive.
|
|
If the \-L option or the \-follow option is in effect, this test
|
|
returns false unless the symbolic link is broken.
|
|
.IP "\-iname \fIpattern\fR"
|
|
Like \-name, but the match is case insensitive. For example, the
|
|
patterns `fo*' and `F??' match the file names `Foo', `FOO', `foo',
|
|
`fOo', etc. In these patterns, unlike filename expansion by the
|
|
shell, an initial '.' can be matched by '*'. That is,
|
|
.B find \-name *bar
|
|
will match the file `.foobar'.
|
|
|
|
.IP "\-inum \fIn\fR"
|
|
File has inode number \fIn\fR. It is normally easier to use the
|
|
.B \-samefile
|
|
test instead.
|
|
.IP "\-ipath \fIpattern\fR"
|
|
Behaves in the same way as \-iwholename. This option is deprecated,
|
|
so please do not use it.
|
|
.IP "\-iregex \fIpattern\fR"
|
|
Like \-regex, but the match is case insensitive.
|
|
.IP "\-iwholename \fIpattern\fR"
|
|
Like \-wholename, but the match is case insensitive.
|
|
.IP "\-links \fIn\fR"
|
|
File has \fIn\fR links.
|
|
.IP "\-lname \fIpattern\fR"
|
|
File is a symbolic link whose contents match shell pattern
|
|
\fIpattern\fR. The metacharacters do not treat `/' or `.' specially.
|
|
If the \-L option or the \-follow option is in effect, this test
|
|
returns false unless the symbolic link is broken.
|
|
.IP "\-mmin \fIn\fR"
|
|
File's data was last modified \fIn\fR minutes ago.
|
|
.IP "\-mtime \fIn\fR"
|
|
File's data was last modified \fIn\fR*24 hours ago.
|
|
See the comments for
|
|
.B \-atime
|
|
to understand how rounding affects the interpretation of file
|
|
modification times.
|
|
.IP "\-name \fIpattern\fR"
|
|
Base of file name (the path with the leading directories removed)
|
|
matches shell pattern \fIpattern\fR. The metacharacters (`*', `?',
|
|
and `[]') match a `.' at the start of the base name (this is a change
|
|
in findutils-4.2.2; see section STANDARDS CONFORMANCE below). To ignore a
|
|
directory and the files under it, use \-prune; see an example in the
|
|
description of \-wholename. Braces are not recognised as being
|
|
special, despite the fact that some shells including Bash imbue braces
|
|
with a special meaning in shell patterns. The filename matching is
|
|
performed with the use of the
|
|
.BR fnmatch (3)
|
|
library function. Don't forget to enclose the pattern in quotes
|
|
in order to protect it from expansion by the shell.
|
|
|
|
.IP "\-newer \fIfile\fR"
|
|
File was modified more recently than \fIfile\fR. If \fIfile\fR is a
|
|
symbolic link and the \-H option or the \-L option is in effect, the
|
|
modification time of the file it points to is always used.
|
|
.IP \-nouser
|
|
No user corresponds to file's numeric user ID.
|
|
.IP \-nogroup
|
|
No group corresponds to file's numeric group ID.
|
|
.IP "\-path \fIpattern\fR"
|
|
See \-wholename. The predicate \-path is also supported by HP-UX
|
|
.BR find .
|
|
.IP "\-perm \fImode\fR"
|
|
File's permission bits are exactly \fImode\fR (octal or symbolic).
|
|
Since an exact match is required, if you want to use this form for
|
|
symbolic modes, you may have to specify a rather complex mode string.
|
|
For example '\-perm g=w' will only match files which have mode 0020
|
|
(that is, ones for which group write permission is the only permission
|
|
set). It is more likely that you will want to use the '+' or '-'
|
|
forms, for example '\-perm -g=w', which matches any file with group
|
|
write permission. See the
|
|
.B EXAMPLES
|
|
section for some illustrative examples.
|
|
.IP "\-perm \-\fImode\fR"
|
|
All of the permission bits \fImode\fR are set for the file.
|
|
Symbolic modes are accepted in this form, and this is usually the way
|
|
in which would want to use them. You must specify 'u', 'g' or 'o' if
|
|
you use a symbolic mode. See the
|
|
.B EXAMPLES
|
|
section for some illustrative examples.
|
|
.IP "\-perm +\fImode\fR"
|
|
Any of the permission bits \fImode\fR are set for the file. Symbolic
|
|
modes are accepted in this form. You must specify 'u', 'g' or 'o' if
|
|
you use a symbolic mode. See the
|
|
.B EXAMPLES
|
|
section for some illustrative examples.
|
|
.IP "\-regex \fIpattern\fR"
|
|
File name matches regular expression \fIpattern\fR. This is a match
|
|
on the whole path, not a search. For example, to match a file named
|
|
`./fubar3', you can use the regular expression `.*bar.' or `.*b.*3',
|
|
but not `f.*r3'. The regular expressions understood by
|
|
.B find
|
|
are by default POSIX Basic Regular Expressions, but this can be
|
|
changed with the
|
|
.B \-regextype
|
|
option.
|
|
.IP "\-samefile \fIname\fR"
|
|
File refers to the same inode as \fIname\fR. When -L is in effect,
|
|
this can include symbolic links.
|
|
.IP "\-size \fIn\fR[cwbkMG]"
|
|
File uses \fIn\fP units of space. The following suffixes
|
|
can be used:
|
|
.RS
|
|
.IP `b'
|
|
for 512-byte blocks (this is the default if no suffix is used)
|
|
.IP `c'
|
|
for bytes
|
|
.IP `w'
|
|
for two-byte words
|
|
.IP `k'
|
|
for Kilobytes (units of 1024 bytes)
|
|
.IP `M'
|
|
for Megabytes (units of 1048576 bytes)
|
|
.IP `G'
|
|
for Gigabytes (units of 1073741824 bytes)
|
|
.RE
|
|
.IP
|
|
The size does not count indirect blocks, but it does count blocks in
|
|
sparse files that are not actually allocated. Bear in mind that the
|
|
`%k' and `%b' format specifiers of \-printf handle sparse files
|
|
differently. The `b' suffix always denotes 512-byte blocks and never
|
|
1 Kilobyte blocks, which is different to the behaviour of \-ls.
|
|
|
|
.IP \-true
|
|
Always true.
|
|
.IP "\-type \fIc\fR"
|
|
File is of type \fIc\fR:
|
|
.RS
|
|
.IP b
|
|
block (buffered) special
|
|
.IP c
|
|
character (unbuffered) special
|
|
.IP d
|
|
directory
|
|
.IP p
|
|
named pipe (FIFO)
|
|
.IP f
|
|
regular file
|
|
.IP l
|
|
symbolic link (never true if the \-L option or the \-follow option is
|
|
in effect, unless the symbolic link is broken).
|
|
.IP s
|
|
socket
|
|
.IP D
|
|
door (Solaris)
|
|
.RE
|
|
.IP "\-uid \fIn\fR"
|
|
File's numeric user ID is \fIn\fR.
|
|
.IP "\-used \fIn\fR"
|
|
File was last accessed \fIn\fR days after its status was last changed.
|
|
.IP "\-user \fIuname\fR"
|
|
File is owned by user \fIuname\fR (numeric user ID allowed).
|
|
.IP "\-wholename \fIpattern\fR"
|
|
File name matches shell pattern \fIpattern\fR. The metacharacters do
|
|
not treat `/' or `.' specially; so, for example,
|
|
.br
|
|
.in +1i
|
|
find . \-wholename './sr*sc'
|
|
.br
|
|
.in -1i
|
|
will print an entry for a directory called './src/misc' (if one
|
|
exists). To ignore a whole directory tree, use \-prune rather than
|
|
checking every file in the tree. For example, to skip the
|
|
directory `src/emacs' and all files and directories under it, and
|
|
print the names of the other files found, do something like this:
|
|
.br
|
|
.in +1i
|
|
find . \-wholename './src/emacs' \-prune \-o \-print
|
|
.br
|
|
.in -1i
|
|
.IP "\-xtype \fIc\fR"
|
|
The same as \-type unless the file is a symbolic link. For symbolic
|
|
links: if the \-H or \-P option was specified, true if the file is a
|
|
link to a file of type \fIc\fR; if the \-L option has been given, true
|
|
if \fIc\fR is `l'. In other words, for symbolic links, \-xtype checks
|
|
the type of the file that \-type does not check.
|
|
|
|
.SS ACTIONS
|
|
.IP "\-delete\fR"
|
|
Delete files; true if removal succeeded. If the removal failed, an
|
|
error message is issued. Use of this action automatically turns on
|
|
the '\-depth' option.
|
|
|
|
.IP "\-exec \fIcommand\fR ;"
|
|
Execute \fIcommand\fR; true if 0 status is returned. All following
|
|
arguments to
|
|
.B find
|
|
are taken to be arguments to the command until an argument consisting
|
|
of `;' is encountered. The string `{}' is replaced by the current
|
|
file name being processed everywhere it occurs in the arguments to the
|
|
command, not just in arguments where it is alone, as in some versions
|
|
of
|
|
.BR find .
|
|
Both of these constructions might need to be escaped (with a `\e') or
|
|
quoted to protect them from expansion by the shell. See the
|
|
.B EXAMPLES
|
|
section for examples of the use of the `\-exec' option. The specified
|
|
command is run once for each matched file.
|
|
The command is executed in the starting directory. There are
|
|
unavoidable security problems surrounding use of the -exec option;
|
|
you should use the -execdir option instead.
|
|
|
|
.IP "\-exec \fIcommand\fR {} +"
|
|
This variant of the -exec option runs the specified command on the
|
|
selected files, but the command line is built by appending each
|
|
selected file name at the end; the total number of invocations of the
|
|
command will be much less than the number of matched files. The
|
|
command line is built in much the same way that
|
|
.B xargs
|
|
builds its command lines. Only one instance of '{}' is allowed within
|
|
the command. The command is executed in the starting directory.
|
|
|
|
.IP "\-execdir \fIcommand\fR ;"
|
|
.IP "\-execdir \fIcommand\fR {} +"
|
|
Like -exec, but the specified command is run from the subdirectory
|
|
containing the matched file, which is not normally the directory in
|
|
which you started
|
|
.BR find .
|
|
This a much more secure method for invoking commands, as it avoids
|
|
race conditions during resolution of the paths to the matched files.
|
|
As with the -exec option, the '+' form of -execdir will build a
|
|
command line to process more than one matched file, but any given
|
|
invocation of
|
|
.I command
|
|
will only list files that exist in the same subdirectory. If you use
|
|
this option, you must ensure that your
|
|
.B $PATH
|
|
environment variable does not reference the current directory;
|
|
otherwise, an attacker can run any commands they like by leaving an
|
|
appropriately-named file in a directory in which you will run
|
|
\-execdir.
|
|
|
|
.IP "\-fls \fIfile\fR"
|
|
True; like \-ls but write to \fIfile\fR like \-fprint.
|
|
The output file is always created, even if the predicate is never
|
|
matched.
|
|
See the
|
|
.B UNUSUAL FILENAMES
|
|
section for information about how unusual characters in filenames are handled.
|
|
|
|
.IP "\-fprint \fIfile\fR"
|
|
True; print the full file name into file \fIfile\fR. If \fIfile\fR
|
|
does not exist when \fBfind\fR is run, it is created; if it does
|
|
exist, it is truncated. The file names ``/dev/stdout'' and
|
|
``/dev/stderr'' are handled specially; they refer to the standard
|
|
output and standard error output, respectively.
|
|
The output file is always created, even if the predicate is never matched.
|
|
See the
|
|
.B UNUSUAL FILENAMES
|
|
section for information about how unusual characters in filenames are handled.
|
|
.IP "\-fprint0 \fIfile\fR"
|
|
True; like \-print0 but write to \fIfile\fR like \-fprint.
|
|
The output file is always created, even if the predicate is never matched.
|
|
See the
|
|
.B UNUSUAL FILENAMES
|
|
section for information about how unusual characters in filenames are handled.
|
|
.IP "\-fprintf \fIfile\fR \fIformat\fR"
|
|
True; like \-printf but write to \fIfile\fR like \-fprint.
|
|
The output file is always created, even if the predicate is never matched.
|
|
See the
|
|
.B UNUSUAL FILENAMES
|
|
section for information about how unusual characters in filenames are handled.
|
|
.IP "\-ok \fIcommand\fR ;"
|
|
Like \-exec but ask the user first (on the standard input); if the
|
|
response does not start with `y' or `Y', do not run the command, and
|
|
return false. If the command is run, its standard input is redirected
|
|
from
|
|
.BR /dev/null .
|
|
|
|
.IP \-print
|
|
True; print the full file name on the standard output, followed by a
|
|
newline. If you are piping the output of
|
|
.B find
|
|
into another program and there is the faintest possibility that the files
|
|
which you are searching for might contain a newline, then you should
|
|
seriously consider using the `\-print0' option instead of `\-print'.
|
|
See the
|
|
.B UNUSUAL FILENAMES
|
|
section for information about how unusual characters in filenames are handled.
|
|
.IP "\-okdir \fIcommand\fR ;"
|
|
Like \-execdir but ask the user first (on the standard input); if the
|
|
response does not start with `y' or `Y', do not run the command, and
|
|
return false. If the command is run, its standard input is redirected
|
|
from
|
|
.BR /dev/null .
|
|
.IP \-print0
|
|
True; print the full file name on the standard output, followed by a
|
|
null character (instead of the newline character that `\-print' uses).
|
|
This allows file names that contain newlines or other types of white
|
|
space to be correctly interpreted by programs that process the
|
|
\fBfind\fR output. This option corresponds to the `\-0' option of
|
|
.BR xargs .
|
|
.IP "\-printf \fIformat\fR"
|
|
True; print \fIformat\fR on the standard output, interpreting `\e'
|
|
escapes and `%' directives. Field widths and precisions can be
|
|
specified as with the `printf' C function. Please note that many of
|
|
the fields are printed as %s rather than %d, and this may mean that
|
|
flags don't work as you might expect. This also means that the `\-'
|
|
flag does work (it forces fields to be left-aligned). Unlike \-print,
|
|
\-printf does not add a newline at the end of the string. The escapes
|
|
and directives are:
|
|
.RS
|
|
.IP \ea
|
|
Alarm bell.
|
|
.IP \eb
|
|
Backspace.
|
|
.IP \ec
|
|
Stop printing from this format immediately and flush the output.
|
|
.IP \ef
|
|
Form feed.
|
|
.IP \en
|
|
Newline.
|
|
.IP \er
|
|
Carriage return.
|
|
.IP \et
|
|
Horizontal tab.
|
|
.IP \ev
|
|
Vertical tab.
|
|
.IP \e\0
|
|
ASCII NUL.
|
|
.IP \e\e
|
|
A literal backslash (`\e').
|
|
.IP \eNNN
|
|
The character whose ASCII code is NNN (octal).
|
|
.PP
|
|
A `\e' character followed by any other character is treated as an
|
|
ordinary character, so they both are printed.
|
|
.IP %%
|
|
A literal percent sign.
|
|
.IP %a
|
|
File's last access time in the format returned by the C `ctime' function.
|
|
.IP %A\fIk\fP
|
|
File's last access time in the format specified by \fIk\fR, which is
|
|
either `@' or a directive for the C `strftime' function. The possible
|
|
values for \fIk\fR are listed below; some of them might not be
|
|
available on all systems, due to differences in `strftime' between
|
|
systems.
|
|
.RS
|
|
.IP @
|
|
seconds since Jan. 1, 1970, 00:00 GMT.
|
|
.PP
|
|
Time fields:
|
|
.IP H
|
|
hour (00..23)
|
|
.IP I
|
|
hour (01..12)
|
|
.IP k
|
|
hour ( 0..23)
|
|
.IP l
|
|
hour ( 1..12)
|
|
.IP M
|
|
minute (00..59)
|
|
.IP p
|
|
locale's AM or PM
|
|
.IP r
|
|
time, 12-hour (hh:mm:ss [AP]M)
|
|
.IP S
|
|
second (00..61)
|
|
.IP T
|
|
time, 24-hour (hh:mm:ss)
|
|
.IP +
|
|
Date and time, separated by '+', for example `2004\-04\-28+22:22:05'.
|
|
The time is given in the current timezone (which may be affected by
|
|
setting the TZ environment variable). This is a GNU extension.
|
|
.IP X
|
|
locale's time representation (H:M:S)
|
|
.IP Z
|
|
time zone (e.g., EDT), or nothing if no time zone is determinable
|
|
.PP
|
|
Date fields:
|
|
.IP a
|
|
locale's abbreviated weekday name (Sun..Sat)
|
|
.IP A
|
|
locale's full weekday name, variable length (Sunday..Saturday)
|
|
.IP b
|
|
locale's abbreviated month name (Jan..Dec)
|
|
.IP B
|
|
locale's full month name, variable length (January..December)
|
|
.IP c
|
|
locale's date and time (Sat Nov 04 12:02:33 EST 1989)
|
|
.IP d
|
|
day of month (01..31)
|
|
.IP D
|
|
date (mm/dd/yy)
|
|
.IP h
|
|
same as b
|
|
.IP j
|
|
day of year (001..366)
|
|
.IP m
|
|
month (01..12)
|
|
.IP U
|
|
week number of year with Sunday as first day of week (00..53)
|
|
.IP w
|
|
day of week (0..6)
|
|
.IP W
|
|
week number of year with Monday as first day of week (00..53)
|
|
.IP x
|
|
locale's date representation (mm/dd/yy)
|
|
.IP y
|
|
last two digits of year (00..99)
|
|
.IP Y
|
|
year (1970...)
|
|
.RE
|
|
.IP %b
|
|
The amount of disk space used for this file in 512-byte blocks. Since disk
|
|
space is allocated in multiples of the filesystem block size this is usually
|
|
greater than %s/1024, but it can also be smaller if the file is a sparse file.
|
|
.IP %c
|
|
File's last status change time in the format returned by the C `ctime'
|
|
function.
|
|
.IP %C\fIk\fP
|
|
File's last status change time in the format specified by \fIk\fR,
|
|
which is the same as for %A.
|
|
.IP %d
|
|
File's depth in the directory tree; 0 means the file is a command line
|
|
argument.
|
|
.IP %D
|
|
The device number on which the file exists (the st_dev field of struct
|
|
stat), in decimal.
|
|
.IP %f
|
|
File's name with any leading directories removed (only the last element).
|
|
.IP %F
|
|
Type of the filesystem the file is on; this value can be used for
|
|
\-fstype.
|
|
.IP %g
|
|
File's group name, or numeric group ID if the group has no name.
|
|
.IP %G
|
|
File's numeric group ID.
|
|
.IP %h
|
|
Leading directories of file's name (all but the last element).
|
|
If the file name contains no slashes (since it is in the current
|
|
directory) the %h specifier expands to ".".
|
|
.IP %H
|
|
Command line argument under which file was found.
|
|
.IP %i
|
|
File's inode number (in decimal).
|
|
.IP %k
|
|
The amount of disk space used for this file in 1K blocks. Since disk space is
|
|
allocated in multiples of the filesystem block size this is usually greater
|
|
than %s/1024, but it can also be smaller if the file is a sparse file.
|
|
.IP %l
|
|
Object of symbolic link (empty string if file is not a symbolic link).
|
|
.IP %m
|
|
File's permission bits (in octal). This option uses the 'traditional'
|
|
numbers which most Unix implementations use, but if your particular
|
|
implementation uses an unusual ordering of octal permissions bits, you
|
|
will see a difference between the actual value of the file's mode and
|
|
the output of %m. Normally you will want to have a leading
|
|
zero on this number, and to do this, you should use the
|
|
.B #
|
|
flag (as in, for example, '%#m').
|
|
.IP %n
|
|
Number of hard links to file.
|
|
.IP %p
|
|
File's name.
|
|
.IP %P
|
|
File's name with the name of the command line argument under which
|
|
it was found removed.
|
|
.IP %s
|
|
File's size in bytes.
|
|
.IP %t
|
|
File's last modification time in the format returned by the C `ctime'
|
|
function.
|
|
.IP %T\fIk\fP
|
|
File's last modification time in the format specified by \fIk\fR,
|
|
which is the same as for %A.
|
|
.IP %u
|
|
File's user name, or numeric user ID if the user has no name.
|
|
.IP %U
|
|
File's numeric user ID.
|
|
.IP %y
|
|
File's type (like in ls \-l), U=unknown type (shouldn't happen)
|
|
.IP %Y
|
|
File's type (like %y), plus follow symlinks: L=loop, N=nonexistent
|
|
.PP
|
|
A `%' character followed by any other character is discarded (but the
|
|
other character is printed).
|
|
|
|
The %m and %d directives support the
|
|
.B #
|
|
,
|
|
.B 0
|
|
and
|
|
.B +
|
|
flags, but the other directives do not, even if they
|
|
print numbers. Numeric directives that do not support these flags
|
|
include
|
|
.BR G ,
|
|
.BR U ,
|
|
.BR b ,
|
|
.BR D ,
|
|
.B k
|
|
and
|
|
.BR n .
|
|
The `\-' format flag is supported and changes the alignment of a field
|
|
from right-justified (which is the default) to left-justified.
|
|
.PP
|
|
See the
|
|
.B UNUSUAL FILENAMES
|
|
section for information about how unusual characters in filenames are handled.
|
|
|
|
|
|
.RE
|
|
.IP \-prune
|
|
If \-depth is not given, true; if the file is a directory, do not descend
|
|
into it.
|
|
.br
|
|
If \-depth is given, false; no effect.
|
|
|
|
.IP "\-quit"
|
|
Exit immediately. No child processes will be left running, but no more
|
|
paths specified on the command line will be processed. For example,
|
|
.B find /tmp/foo /tmp/bar \-print \-quit
|
|
will print only
|
|
.BR /tmp/foo .
|
|
Any command lines which have been built up with
|
|
.B \-execdir ... {} +
|
|
will be invoked before
|
|
.B find
|
|
exits. The exit status may or may not be zero, depending on whether
|
|
an error has already occurred.
|
|
|
|
.IP \-ls
|
|
True; list current file in `ls \-dils' format on standard output.
|
|
The block counts are of 1K blocks, unless the environment variable
|
|
POSIXLY_CORRECT is set, in which case 512-byte blocks are used.
|
|
See the
|
|
.B UNUSUAL FILENAMES
|
|
section for information about how unusual characters in filenames are handled.
|
|
|
|
|
|
.SS UNUSUAL FILENAMES
|
|
Many of the actions of
|
|
.B find
|
|
result in the printing of data which is under the control of other
|
|
users. This includes file names, sizes, modification times and so
|
|
forth. File names are a potential problem since they can contain any
|
|
character except '\\0' and '/'. Unusual characters in file names can
|
|
do unexpected and often undesirable things to your terminal (for
|
|
example, changing the settings of your function keys on some
|
|
terminals). Unusual characters are handled differently by various
|
|
actions, as described below.
|
|
.IP "\-print0, \-fprint0\"
|
|
Always print the exact filename, unchanged, even if the output is
|
|
going to a terminal.
|
|
.IP "\-ls, \-fls"
|
|
Unusual characters are always escaped. White space, backslash, and
|
|
double quote characters are printed using C-style escaping (for
|
|
example '\\f', '\\"'). Other unusual characters are printed using an
|
|
octal escape. Other printable characters (for \-ls and -fls these are
|
|
the characters between octal 041 and 0176) are printed as-is.
|
|
.IP "\-printf, \-fprintf"
|
|
If the output is not going to a terminal, it is printed as-is.
|
|
Otherwise, the result depends on which directive is in use. The
|
|
directives %D, %F, %g, %G, %H, %Y, and %y expand to values which are
|
|
not under control of files' ownwers, and so are printed as-is. The
|
|
directives %a, %b, %c, %d, %i, %k, %m, %M, %n, %s, %t, %u and %U have
|
|
values which are under the control of files' ownwers but which cannot
|
|
be used to send arbitrary data to the terminal, and so these are
|
|
printed as-is. The directives %f, %h, %l, %p and %P are quoted. This
|
|
quoting is performed in the same way as for GNU
|
|
.BR ls .
|
|
This is not the same quoting mechanism as the one used for \-ls and
|
|
\-fls. If you are able to decide what format to use for the output
|
|
of
|
|
.B find
|
|
then it is normally better to use '\\0' as a terminator
|
|
than to use newline, as file names can contain white space and newline
|
|
characters.
|
|
.IP "\-print, \-fprint"
|
|
Quoting is handled in the same way as for \-printf and \-fprintf.
|
|
If you are using
|
|
.B find
|
|
in a script or in a situation where the matched files might have
|
|
arbitrary names, you should consider using \-print0 instead of
|
|
\-print.
|
|
.P
|
|
The \-ok and \-okdir actions print the current filename as-is. This
|
|
may change in a future release.
|
|
.SS OPERATORS
|
|
.P
|
|
Listed in order of decreasing precedence:
|
|
.IP "( \fIexpr\fR )"
|
|
Force precedence.
|
|
.IP "! \fIexpr\fR"
|
|
True if \fIexpr\fR is false.
|
|
.IP "\-not \fIexpr\fR"
|
|
Same as ! \fIexpr\fR, but not POSIX compliant.
|
|
.IP "\fIexpr1 expr2\fR"
|
|
Two expressions in a row are taken to be joined with an
|
|
implied "and"; \fIexpr2\fR is not evaluated if \fIexpr1\fR is false.
|
|
.IP "\fIexpr1\fR \-a \fIexpr2\fR"
|
|
Same as \fIexpr1 expr2\fR.
|
|
.IP "\fIexpr1\fR \-and \fIexpr2\fR"
|
|
Same as \fIexpr1 expr2\fR, but not POSIX compliant.
|
|
.IP "\fIexpr1\fR \-o \fIexpr2\fR"
|
|
Or; \fIexpr2\fR is not evaluated if \fIexpr1\fR is true.
|
|
.IP "\fIexpr1\fR \-or \fIexpr2\fR"
|
|
Same as \fIexpr1\fR \-o \fIexpr2\fR, but not POSIX compliant.
|
|
.IP "\fIexpr1\fR , \fIexpr2\fR"
|
|
List; both \fIexpr1\fR and \fIexpr2\fR are always evaluated.
|
|
The value of \fIexpr1\fR is discarded; the value of the list is the
|
|
value of \fIexpr2\fR.
|
|
The comma operator can be useful for searching for several
|
|
different types of thing, but traversing the filesystem hierarchy only
|
|
once. The
|
|
.B \-fprintf
|
|
action can be used to list the various matched items into several
|
|
different output files.
|
|
|
|
|
|
.SH "STANDARDS CONFORMANCE"
|
|
The following options are specified in the POSIX standard
|
|
(IEEE Std 1003.1, 2003 Edition):
|
|
.IP "\-H"
|
|
This option is supported.
|
|
.IP "\-L"
|
|
This option is supported.
|
|
.IP "\-name"
|
|
This option is supported, but POSIX conformance depends on the
|
|
POSIX conformance of the system's
|
|
.BR fnmatch (3)
|
|
library function. As of findutils-4.2.2, shell metacharacters
|
|
('*'. '?' or '[]' for example) will match a leading '.', because
|
|
IEEE PASC interpretation 126 requires this. This is a change from
|
|
previous versions of findutils.
|
|
.IP "\-type"
|
|
Supported. POSIX specifies `b', `c', `d', `l', `p', `f' and `s'.
|
|
GNU find also supports `D', representing a Door, where the OS provides these.
|
|
|
|
.IP "\-ok"
|
|
Supported. Interpretation of the response is not locale-dependent
|
|
(see ENVIRONMENT VARIABLES).
|
|
|
|
.IP "\-newer"
|
|
Supported. If the file specified is a symbolic link, it is always
|
|
dereferenced. This is a change from previous behaviour, which used to
|
|
take the relevant time from the symbolic link; see the HISTORY section
|
|
below.
|
|
|
|
.IP "Other predicates"
|
|
The predicates
|
|
`\-atime',
|
|
`\-ctime',
|
|
`\-depth',
|
|
`\-group',
|
|
`\-links',
|
|
`\-mtime',
|
|
`\-nogroup',
|
|
`\-nouser',
|
|
`\-perm',
|
|
`\-print',
|
|
`\-prune',
|
|
`\-size',
|
|
`\-user' and
|
|
`\-xdev',
|
|
are all supported.
|
|
|
|
.P
|
|
The POSIX standard specifies parentheses `(', `)', negation `!' and the
|
|
`and' and `or' operators (`\-a', `\-o').
|
|
.P
|
|
All other options, predicates, expressions and so forth are extensions
|
|
beyond the POSIX standard. Many of these extensions are not unique to
|
|
GNU find, however.
|
|
.P
|
|
The POSIX standard requires that
|
|
.IP
|
|
The
|
|
.B find
|
|
utility shall detect infinite loops; that is, entering a
|
|
previously visited directory that is an ancestor of the last file
|
|
encountered. When it detects an infinite loop, find shall write a
|
|
diagnostic message to standard error and shall either recover its
|
|
position in the hierarchy or terminate.
|
|
.P
|
|
The link count of directories which contain entries which are hard
|
|
links to an ancestor will often be lower than they otherwise should
|
|
be. This can mean that GNU find will sometimes optimise away the
|
|
visiting of a subdirectory which is actually a link to an ancestor.
|
|
Since
|
|
.B find
|
|
does not actually enter such a subdirectory, it is allowed to avoid
|
|
emitting a diagnostic message. Although this behaviour may be
|
|
somewhat confusing, it is unlikely that anybody actually depends on
|
|
this behaviour. If the leaf optimisation has been turned off with
|
|
.BR -noleaf ,
|
|
the directory entry will always be examined and the diagnostic message
|
|
will be issued where it is appropriate. Symbolic links cannot be used
|
|
to create filesystem cycles as such, but if the \-L option or the
|
|
\-follow option is in use, a diagnostic message is issued when
|
|
.B find
|
|
encounters a loop of symbolic links. As with loops containing hard
|
|
links, the leaf optimisation will often mean that
|
|
.B find
|
|
knows that it doesn't need to call
|
|
.I stat()
|
|
or
|
|
.I chdir()
|
|
on the symbolic link, so this diagnostic is frequently not necessary.
|
|
.P
|
|
The \-d option is supported for compatibility with various BSD systems,
|
|
but you should use the POSIX-compliant predicate \-depth instead.
|
|
.SH "ENVIRONMENT VARIABLES"
|
|
.IP LANG
|
|
Provides a default value for the internationalization variables that
|
|
are unset or null.
|
|
.IP LC_ALL
|
|
If set to a non-empty string value, override the values of all the
|
|
other internationalization variables.
|
|
.IP LC_COLLATE
|
|
The POSIX standard specifies that this variable affects the pattern
|
|
matching to be used for the `\-name' option. GNU find uses the
|
|
.BR fnmatch (3)
|
|
library function, and so support for `LC_COLLATE' depends on the
|
|
system library.
|
|
.IP
|
|
POSIX also specifies that the `LC_COLLATE' environment
|
|
variable affects the interpretation of the user's response to the
|
|
query issued by `\-ok', but this is not the case for GNU find.
|
|
.IP LC_CTYPE
|
|
This variable affects the treatment of character classes used with
|
|
the `\-name' option, if the system's
|
|
.BR fnmatch (3)
|
|
library function supports this. It has no effect on the behaviour
|
|
of the `\-ok' expression.
|
|
.IP LC_MESSAGES
|
|
Determines the locale to be used for internationalised messages.
|
|
.IP NLSPATH
|
|
Determines the location of the internationalisation message catalogues.
|
|
.IP PATH
|
|
Affects the directories which are searched to find the executables
|
|
invoked by `\-exec', `\-execdir', `\-ok' and `\-okdir'.
|
|
.IP POSIXLY_CORRECT
|
|
Determines the block size used by `-ls'.
|
|
.IP TZ
|
|
Affects the time zone used for some of the time-related format
|
|
directives of -printf and -fprintf.
|
|
.SH "EXAMPLES"
|
|
.nf
|
|
.B find /tmp \-name core \-type f \-print | xargs /bin/rm -f
|
|
|
|
.fi
|
|
Find files named
|
|
.B core
|
|
in or below the directory
|
|
.B /tmp
|
|
and delete them. Note that this will work incorrectly if there are
|
|
any filenames containing newlines, single or double quotes, or spaces.
|
|
.P
|
|
.B find /tmp \-name core \-type f \-print0 | xargs \-0 /bin/rm -f
|
|
|
|
.fi
|
|
Find files named
|
|
.B core
|
|
in or below the directory
|
|
.B /tmp
|
|
and delete them, processing filenames in such a way that file or
|
|
directory names containing single or double quotes, spaces or newlines
|
|
are correctly handled. The
|
|
.B \-name
|
|
test comes before the
|
|
.B \-type
|
|
test in order to avoid having to call
|
|
.B stat(2)
|
|
on every file.
|
|
|
|
.P
|
|
.nf
|
|
.B find . \-type f \-exec file '{}' \e\;
|
|
|
|
.fi
|
|
Runs `file' on every file in or below the current directory. Notice
|
|
that the braces are enclosed in single quote marks to protect them
|
|
from interpretation as shell script punctuation. The semicolon is
|
|
similarly protected by the use of a backslash, though ';' could have
|
|
been used in that case also.
|
|
|
|
.P
|
|
.nf
|
|
.B find / \t\e( \-perm +4000 \-fprintf /root/suid.txt '%#m %u %p\en' \e) , \e
|
|
.B \t\t\e( \-size +100M \-fprintf /root/big.txt '%\-10s %p\en' \e)
|
|
|
|
.fi
|
|
Traverse the filesystem just once, listing setuid files and
|
|
directories into
|
|
.B /root/suid.txt
|
|
and large files into
|
|
.BR /root/big.txt .
|
|
|
|
.P
|
|
.nf
|
|
.B find $HOME -mtime 0
|
|
|
|
.fi
|
|
Search for files in your home directory which have been modified in
|
|
the last twenty-four hours. This command works this way because the
|
|
time since each file was last modified is divided by 24 hours and any
|
|
remainder is discarded. That means that to match
|
|
.B -mtime
|
|
.BR 0 ,
|
|
a file will have to have a modification in the past which is less than
|
|
24 hours ago.
|
|
|
|
|
|
.P
|
|
.nf
|
|
.B find . -perm 664
|
|
|
|
.fi
|
|
Search for files which have read and write permission for their owner,
|
|
and group, but which other users can read but not write to. Files
|
|
which meet these criteria but have other permissions bits set (for
|
|
example if someone can execute the file) will not be matched.
|
|
|
|
.P
|
|
.nf
|
|
.B find . -perm -664
|
|
|
|
.fi
|
|
Search for files which have read and write permission for their owner
|
|
and group, and which other users can read, without regard to the
|
|
presence of any extra permission bits (for example the executable
|
|
bit). This will match a file which has mode 0777, for example.
|
|
|
|
.P
|
|
.nf
|
|
.B find . -perm +222
|
|
|
|
.fi
|
|
Search for files which are writable by somebody (their owner, or
|
|
their group, or anybody else).
|
|
|
|
.P
|
|
.nf
|
|
.B find . -perm +022
|
|
.B find . -perm +g+w,o+w
|
|
.B find . -perm +g=w,o=w
|
|
|
|
.fi
|
|
All three of these commands do the same thing, but the first one uses
|
|
the octal representation of the file mode, and the other two use the
|
|
symbolic form. These commands all search for files which are
|
|
writable by either their owner or their group. The files don't have
|
|
to be writable by both the owner and group to be matched; either will
|
|
do.
|
|
|
|
.P
|
|
.nf
|
|
.B find . -perm -022
|
|
.B find . -perm -g+w,o+w
|
|
|
|
.fi
|
|
Both these commands do the same thing; search for files which are
|
|
writable by both their owner and their group.
|
|
|
|
|
|
|
|
.SH EXIT STATUS
|
|
.PP
|
|
.B find
|
|
exits with status 0 if all files are processed successfully, greater
|
|
than 0 if errors occur. This is deliberately a very broad
|
|
description, but if the return value is non-zero, you should not rely
|
|
on the correctness of the results of
|
|
.BR find .
|
|
|
|
.SH "SEE ALSO"
|
|
\fBlocate\fP(1), \fBlocatedb\fP(5), \fBupdatedb\fP(1), \fBxargs\fP(1),
|
|
\fBfnmatch\fP(3), \fBregex\fP(7), \fBstat\fP(2), \fBlstat\fP(2),
|
|
\fBls\fP(1), \fBprintf\fP(3), \fBstrftime\fP(3), \fBctime\fP(3),
|
|
\fBFinding Files\fP (on-line in Info, or printed),
|
|
.SH "HISTORY"
|
|
As of findutils-4.2.2, shell metacharacters ('*'. '?' or '[]' for
|
|
example) used in filename patterns will match a leading '.', because
|
|
IEEE POSIX interpretation 126 requires this.
|
|
.SH "NON-BUGS"
|
|
.nf
|
|
.B $ find . -name *.c -print
|
|
find: paths must precede expression
|
|
Usage: find [-H] [-L] [-P] [path...] [expression]
|
|
.fi
|
|
.P
|
|
This happens because
|
|
.I *.c
|
|
has been expanded by the shell
|
|
resulting in
|
|
.B find
|
|
actually receiving a command line like this:
|
|
.nf
|
|
|
|
.B find . -name bigram.c code.c frcode.c locate.c -print
|
|
|
|
.fi
|
|
That command is of course not going to work. Instead of doing things
|
|
this way, you should enclose the pattern in quotes:
|
|
.nf
|
|
.B $ find . -name \'*.c\' -print
|
|
.fi
|
|
|
|
.SH "BUGS"
|
|
.P
|
|
There are security problems inherent in the behaviour that the POSIX
|
|
standard specifies for
|
|
.BR find ,
|
|
which therefore cannot be fixed. For example, the -exec action is
|
|
inherently insecure, and -execdir should be used instead.
|
|
Please see \fBFinding Files\fP for more information.
|
|
.P
|
|
The best way to report a bug is to use the form at
|
|
http://savannah.gnu.org/bugs/?group=findutils.
|
|
The reason for this is that you will then be able to track progress in
|
|
fixing the problem. Other comments about \fBfind\fP(1) and about
|
|
the findutils package in general can be sent to the
|
|
.I bug\-findutils
|
|
mailing list. To join the list, send email to
|
|
.IR bug\-findutils\-request@gnu.org .
|