linux命令学习笔记之find

命令简介
find用来查找指定目录中的文件。该命令很强大很复杂,完全掌握不是一件简单的事情,以下是几个简单示例,方便快速上手。

语法格式
find pathname -options [-print -exec -ok …]

常用参数说明
pathname:
find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。

-print:
find命令将匹配的文件输出到标准输出。

-exec:
find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为’command’ { } \;,注意{ }和\;之间的空格。

-ok:
和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

示例
(1)

find / -name .profile -print

从根目录开始,查找所有以.profile为后缀的文件,其中.profile既可以使用双引号也可以不使用双引号。

这是AIX的man手册中的第一个示例。假如我们要搜索当前目录下的所有以cp为后缀的文件,仿照该示例,命令应该是这个样子:

find . -name .cp -print

但是输入该命令无任何输出。可以输出当前目录所有以cp为后缀的文件的命令如下:


find . -name “*.cp” -print

(2)

find ./ -name “*.php” | xargs grep ‘要查找的内容’

查找当前目录下面所有的php文件里面的指定内容。

(3)

find ./ -name “*.php” | xargs grep -F ‘要查找的内容’

如果需要查找的内容包含特殊符号,比如$等等,grep要加参数F。

(4)
Find 如何过滤掉没有权限的目录信息?

环境 AIX 5.3
例如查找:find / -perm -4000 -user 0 -ls | grep -v “Can’t” 会有 “find: cannot chdir to : Permission denied”类似提示,如何去掉?

解答:将命令改为 find / -perm -4000 -user 0 -ls 2>/dev/null 即可。

原始链接:http://techbbs.zol.com.cn/1/85_874.html


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

从AIX上copy下来的man手册,心情好的时候读读:

Purpose

Finds files with a matching expression.

Syntax

find [ -H | -L ] Path … [ Expression ]

Description

The find command recursively searches the directory tree for each specified Path parameter, seeking files that match a Boolean expression written using the terms given in the following text. When the find command is recursively descending directory structures, it will not descend into directories that are symbolically linked into the current hierarchy. The output from the find command depends on the terms specified by the Expression parameter.

find命令会递归搜索path参数指定的目录,在其中寻找符合express所指定的boolean表达式的文件。再递归遍历的过程中,如果遇到链接到当前目录的链接符号,不会对其进行遍历。find命令的结果依赖于expression参数。

The find command does not support the 4.3 BSD fast find syntax.

Flags

-H
Cause the file information and file type evaluated for each symbolic link encountered on the command line to be those of the file referenced by the link, and not the link itself. If the referenced file does not exist, the file information and type shall be for the link itself. File information for all symbolic links not on the command line
shall be that of the link itself.

-L
Cause the file information and file type evaluated for each symbolic link to be those of the file referenced by the link, and not the link itself.

Expression Terms

These Boolean expressions and variables describe the search boundaries of the find command as defined in the Path and Expression parameters. Note: In the following definitions, the n variable specifies a decimal integer that can be expressed as +n (more than n), -n (less than n), or n (exactly n).

\( Expression \)
Evaluates to the value True if the expression in parentheses is true.

-cpio Device
Writes the current file to the specified device in the cpio command format.

-depth
Always evaluates to the value True. Causes the descent of the directory hierarchy to be done so that all entries in a directory are affected before the directory itself is affected. This can be useful when the find command is used with the cpio command to transfer files that are contained in directories without write permission.

-ea
Evaluates to the value True if file has either access control information (ACL) or Extended attributes (EA) set.

-exec Command
Evaluates to the value True if the specified command runs and returns a 0 value as exit status. The end of the specified command must be punctuated by a semicolon in quotation marks or escaped semicolon. A command parameter {}(braces) is replaced by the current path name.

-follow
Causes symbolic and hard links to be followed.

-fstype Type
Evaluates to the value True if the file system to which the file belongs is of the specified type, where the Type
variable has a value of jfs (journaled file system) or nfs (network file system).

-group Group
Evaluates to the value True if the file belongs to the specified group. If the value of the Group variable is numeric
and does not appear in the /etc/group file, it is interpreted as a group ID.

-nogroup
Evaluates to the value True if the file belongs to a group not in the /etc/group database.

-inum n
Evaluates to the value True if file has an i-node matching the value of the n variable.

-links n
Evaluates to the value True if the file has the specified number of links. See the ln command for a description of
links.

-long
Prints all available characters of each user/group name instead of truncating to the first 8 when used in combination
with -ls.

-ls
Always evaluates to the value True. Causes the current path name to be printed together with its associated
statistics. These statistics include the following:
* I-node number
* Size in kilobytes (1024 bytes)
* Protection mode
* Number of hard links
* User
* Group
* Size in bytes
* Modification time

If the file is a special file, the size field contains the major and minor device numbers. If the file is a symbolic
link, the path name of the linked-to file is printed preceded by the -> (hyphen, greater than) symbols. Formatting is
similar to that of the ls -filds command, however formatting is done internally without executing the ls command,
therefore differences in output with the ls command may exist, such as with the protection mode.

-name File
Evaluates to the value True if the value of the File variable matches the file name. The usual shell filename
generation characters (see the sh command) can be used. The pattern should either be enclosed in quotation marks or
the escape character used when the find command is used from the shell. A backslash ( \ ) is used as an escape
character within the pattern. You can use wildcard (pattern-matching) characters, provided they are in quotation
marks. See “Pattern Matching with Wildcards and Metacharacters” in AIX 5L Version 5.3 System User’s Guide: Operating
System and Devices for more information on using wildcard characters.

In an expression such as [a-z], the hyphen means through according to the current collating sequence. A collating
sequence may define equivalence classes for use in character ranges. See “National Language Support OverviewWow” in
the AIX 5L Version 5.3 National Language Support Guide and Reference for more information on collating sequences and
equivalence classes.

-newer File
Evaluates to the value True if the current file has been modified more recently than the file indicated by the File
variable.

-ok Command
The same as the -exec expression, except that the find command asks you whether it should start the specified command.
An affirmative response starts the command. The end of the specified command must be punctuated by a semicolon
enclosed in quotation marks or the \; (backslash-escape semicolon).

-perm [ – ] OctalNumber
Evaluates to the value True if the permission code of the file exactly matches the OctalNumber parameter (see the
chmod command for an explanation of file permissions). If the optional – (hyphen) is present, this expression
evaluates to true if at least these permissions are set. The OctalNumber parameter may be up to nine octal digits.

-perm [ – ] Mode
The mode argument is used to represent file mode bits. It will be identical in format to the operand
described in chmod, and will be interpreted as follows:

Initially, a template will be assumed with all file mode bits cleared. Op symbols have the following function:
+
sets the appropriate mode bits in the template

clears the appropriate bits
=

sets the appropriate mode bits, without regard to the contents of the process’ file mode creation mask
The op symbol – cannot be the first character of mode. This avoids ambiguity with the optional leading hyphen. Because
the initial mode is all bits off, there are no symbolic modes that need to use – as the first character.

If the hyphen is omitted, the primary evaluates as True when the file permission bits exactly match the value of the
resulting template. Otherwise, if mode is prefixed by a hyphen, the primary will evaluate as True if at least all bits
in the resulting template are set in the file permission bits.

The Mode parameter is identical to the chmod command syntax. This expression evaluates to the value True if the file
has exactly these permissions. If the optional – (hyphen) is present, this expression evaluates to the value True if
at least these permissions are set.
-print
Always evaluates to the value True. Displays the current path name. The find command assumes a -print expression,
unless the -exec, – ls, or -ok expressions are present.
-prune
Always evaluates to the value True. Stops the descent of the current path name if it is a directory. If the -depth
flag is specified, the -prune flag is ignored.
-size n
Evaluates to the value True if the file is the specified n of blocks long (512 bytes per block). The file size is
rounded up to the nearest block for comparison.
-size nc
Evaluates to the value True if the file is exactly the specified n of bytes long. Adding c to the end of the n
variable indicates that the size of the file is measured in individual bytes not blocks.
-atime n
Evaluates as True if the file access time subtracted from the initialization time, divided by 86400 seconds (with any
remainder discarded), is n. 86400 seconds is 24 hours. Note: The definition of -atime has changed to comply with the
Single UNIX Specification, Version 3. The previous behavior of -atime evaluated as True if the file had been accessed
in n-1 to n multiples of 24 hours. By default, find -atime works like it did prior to UNIX03. The UNIX03 behavior can
be obtained by setting the environment variables XPG_SUS_ENV to ON and XPG_UNIX98 to OFF.

The previous behavior for this option can be obtained by setting the XPG_UNIX98 variable to ON.
-ctime n
Evaluates to the value True if the file i-node (status information) has been changed in the specified number of 24-
hour periods.
-mtime n
Evaluates as True if the file modification time subtracted from the initialization time, divided by 86400 seconds
(with any remainder discarded), is n. 86400 seconds is 24 hours. Note: The definition of -mtime has changed to comply
with the Single UNIX Specification, Version 3. The previous behavior of -mtime evaluated as True if the file had been
modified in n-1 to n multiples of 24 hours. By default, find -mtime works like it did prior to UNIX03. The UNIX03
behavior can be obtained by setting the environment variables XPG_SUS_ENV to ON and XPG_UNIX98 to OFF.

The previous behavior for this option can be obtained by setting the XPG_UNIX98 variable to ON.
-amin Number
Evaluates to the value True if the file has been accessed in Number-1 to Number minutes. For example, -amin 2 is true
if the file has been accessed within 1 to 2 minutes.
-cmin Number
Evaluates to the value True if the file i-node (status information) has been changed in the specified number of
minutes.
-mmin Number
Evaluates to the value True if the file has been modified in Number-1 to Number minutes
-type Type
Evaluates to the value True if the Type variable specifies one of the following values:
b
Block special file
c
Character special file
d
Directory

f
Plain file
l
Symbolic link
p
FIFO (a named pipe)
s
Socket
-user User
Evaluates to the value True if the file belongs to the specified user. If the value of the User variable is numeric
and does not appear as a login name in the /etc/passwd file, it is interpreted as a user ID.
-nouser
Evaluates to the value True if the file belongs to a user not in the /etc/passwd database.
-xdev
Always evaluates to the value True. Prevents the find command from traversing a file system different from the one
specified by the Path parameter.

These expressions can be combined using the following operators in the order of decreasing precedence:
1 ( Expression ) – A parenthetic group of expressions and operators (parentheses are special to the shell and require
the backslash-escape sequence).
2 ! Expression – The negation of an expression (‘!’ is the unary NOT operator).
3 Expression [ -a ] Expression – Concatenation of expressions (the AND operation is implied by the juxtaposition of two
primaries or may be explicitly stated as -a).
4 Expression -o Expression – Alternation of primaries; -o is the OR operator. The second expression will not be
evaluated if the first expression is true. Note: When using the find and cpio commands together, you must use the
-follow option with the cpio command when using the -L option with the cpio command, and visa versa. Not using these
two options together produces undesirable results. If no expression is present, -print as used in the default
expression. For example, if the given expression does not contain any of the primaries -exec, -ok, or -print, the
given expression will be replaced by (given_expression) -print. The -user, -group, and -newer primaries each evaluate
their respective arguments only once. Using a command specified by -exec or -ok does not affect subsequent primaries
on the same file.

Exit Status

This command returns the following exit values:
0
All Path parameters were traversed successfully.
>0
An error occurred.

Examples

1、To list all files in the file system with a given base file name, type: find / -name .profile -print

This searches the entire file system and writes the complete path names of all files named .profile. The / (slash) tells the find command to search the root directory and all of its subdirectories. In order not to waste time, it is best to limit the search by specifying the directories where you think the files might be.

1、列出文件系统中指定后缀的所有文件使用如下命令:find / -name .profile -print

该命令会从根路径开始,搜索整个文件系统并输出后缀名为.profile的所有文件的完整路径。/(正斜杠)表示从根路径开始搜索整个文件系统。为了提高搜索的效率,最好指定一个搜索文件可能存在的文件夹,为find命令缩小搜索的范围。

2 To list files having a specific permission code in the current directory tree, type: find . -perm 0600 -print

This lists the names of the files that have only owner-read and owner-write permission. The . (dot) tells the find command to search the current directory and its subdirectories. See the chmod command for an explanation of permission codes.

3 To search several directories for files with certain permission codes, type: find manual clients proposals -perm -0600 -print

This lists the names of the files that have owner-read and owner-write permission and possibly other permissions. The manual, clients, and proposals directories and their subdirectories are searched. In the previous example, -perm 0600 selects only files with permission codes that match 0600 exactly. In this example, -perm -0600 selects files with permission codes that allow the accesses indicated by 0600 and other accesses above the 0600 level. This also matches
the permission codes 0622 and 2744.

4 To list all files in the current directory that have been changed during the current 24-hour period, type: find .-ctime 1 -print

5 To search for regular files with multiple links, type: find . -type f -links +1 -print

This lists the names of the ordinary files (-type f) that have more than one link (-links +1). Note: Every directory
has at least two links: the entry in its parent directory and its own . (dot) entry. The ln command explains multiple
file links.

6 To find all accessible files whose path name contains find, type: find . -name ‘*find*’ -print

7 To remove all files named a.out or *.o that have not been accessed for a week and that are not mounted using nfs,
type: find / \( -name a.out -o -name ‘*.o’ \) -atime +7 ! -fstype nfs -exec rm {} \;

Note: The number used within the -atime expression is +7. This is the correct entry if you want the command to act on
files not accessed for more than a week (seven 24-hour periods).

8 To print the path names of all files in or below the current directory, except the directories named SCCS or files in
the SCCS directories, type: find . -name SCCS -prune -o -print

To print the path names of all files in or below the current directory, including the names of SCCS directories, type:

find . -print -name SCCS -prune

9 To search for all files that are exactly 414 bytes long, type:

find . -size 414c -print
10 To find and remove every file in your home directory with the .c suffix, type:

find /u/arnold -name “*.c” -exec rm {} \;

Every time the find command identifies a file with the .c suffix, the rm command deletes that file. The rm command is
the only parameter specified for the -exec expression. The {} (braces) represent the current path name.
11 In this example, dirlink is a symbolic link to the directory dir. You can list the files in dir by refering to the
symbolic link dirlink on the command line. To do this, type:

find -H dirlink -print
12 In this example, dirlink is a symbolic link to the directory dir. To list the files in dirlink, traversing the file
hierarchy under dir including any symbolic links, type:

find -L dirlink -print
13 To determine whether the file dir1 referred by the symbolic link dirlink is newer than dir2, type:

find -H dirlink -newer dir2
Note: Because the -H flag is used, time data is collected not from dirlink but instead from dir1, which is found by
traversing the symbolic link.
14 To produce a listing of files in the current directory in ls format with expanded user and group name, type :

find . -ls -long
15 To list the files with ACL/EA set in current directory, type:

find . -ea

Files

/usr/bin/find
Contains the find command.
/bin/find
Symbolic link to the find command.
/etc/group
Contains a list of all known groups.

/etc/passwd
Contains a list of all known users.

Related Information

The chmod command, cpio command, ln command, sh command.

Backup Overview for System Management in AIX 5L Version 5.3 System Management Concepts: Operating System and Devices
introduces archiving methods, including the use of the cpio command.

Directories Overview in AIX 5L Version 5.3 Files Reference describes the structure and characteristics of directories in
the file system.

Types of Files in AIX 5L Version 5.3 System User’s Guide: Operating System and Devices describes files, file types, how to
name files, and how to use wildcard characters.

Input and Output Redirection Overview in AIX 5L Version 5.3 System User’s Guide: Operating System and Devices describes how
the operating system processes input and output.

Shells Overview in AIX 5L Version 5.3 System User’s Guide: Operating System and Devices describes shells, the different
types of shells, and how shells affect the way commands are interpreted.

File and Directory Access Modes in AIX 5L Version 5.3 System User’s Guide: Operating System and Devices introduces file
ownership and permissions to access files and directories.


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

参考链接:
Linux文件查找命令find,xargs详述
http://blog.csdn.net/ydfok/archive/2007/01/18/1486451.aspx

此条目发表在lnmpa分类目录,贴了标签。将固定链接加入收藏夹。

发表评论

您的电子邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据