- For the EP by Hidden in Plain View, see Find (EP)
The find program is a search utility, mostly found on Unix-like platforms. It searches through a directory tree of a filesystem, locating files based on some user-specified criteria. By default, find returns all files below the current working directory. Further, find allows the user to specify an action to be taken on each matched file. Thus, it is extremely powerful program for applying actions to many files. It also supports regexp matching.
Examples
From current directory
find . -name my\*
This searches in the current directory (represented by a period) and below it, for files and directories with names starting with
my. The backslash before the star is needed to avoid the shell expansion. Without the backslash, the shell would replace
my* with the list of files whose names begin with
my in the current directory. An alternative is to enclose the the arguments in quotes:
find . -name "my*"
Files only
find . -name "my*" -type f
This limits the results of the above search to only regular files, therefore excluding directories, special files, pipes, symbolic links, etc.
my* is enclosed in quotes as otherwise the shell would replace it with the list of files in the current directory starting with
my
Commands
The previous examples created listings of results because, by default,
find executes the '-print' action.
find . -name "my*" -type f -ls
This prints an extended file information.
Search all directories
find / -name "myfile" -type f -print
This searches every file on the computer for a file with the name
myfile. It is generally not a good idea to look for data files this way. This can take a considerable amount of time, so it is best to specify the directory more precisely.
Specify a directory
find /home/brian -name "myfile" -type f -print
This searches for files named
myfile in the
/home/brian directory, which is the home directory for the user
brian. You should always specify the directory to the deepest level you can remember.
Execute an action
find /var/ftp/mp3 -name "*.mp3" -type f -exec chmod 744 {} \;
This command changes the
permissions of all files with a name ending in
.mp3 in the directory
/var/ftp/mp3. This is obtained by specifying the option
-exec chmod 744 {} \; in the command. For every file whose name ends in
.mp3, the command
chmod 744 {} is executed replacing
{} with the name of the file. The semicolon (backslashed to avoid the shell to interpret it as a command separator) indicates the end of the command. Permission
744, usually shown as
rwxr--r--, gives the file owner full permission to read, write, and execute the files, while the other users have read-only access.
Search for a string
This command will search for a string in all files from the /tmp directory and below. The
/dev/null argument is used to show the name of the file before the text that is found. Without it, only the text found is printed.
find /tmp -exec grep "search string" '{}' /dev/null \; -print
Example of search for "LOG" in jsmith's home directory
find ~jsmith -exec grep "LOG" '{}' /dev/null \; -print
/home/jsmith/scripts/errpt.sh:cp $LOG $FIXEDLOGNAME
/home/jsmith/scripts/errpt.sh:cat $LOG
/home/jsmith/scripts/title:USER=$LOGNAME
The double quotes (" ") surrounding the search string and single quotes (' ') surrounding the braces are optional in this example, but needed to allow spaces and other special characters in the string.
External links
Unix software | Searching
Find