类UNIX系统将一切皆视为文件。文件具有不同的类型,例如普通文件、目录、字符设备、块设备、符号链接、套接字以及FIFO等。
-type 选项可以对文件类型搜索进行过滤。以下是type可指定的类型:
1 2 3 4 5
只列出所有的目录: $ find . -type d -print 只列出普通文件: $ find . -type f -print
基于时间进行搜索
UNIX/Linux 文件系统中的每一个文件都有三种时间戳(timestamp),如下所示。
访问时间(-atime, access time): 用户最近一次访问文件的时间。
修改时间(-mtime, modify time): 文件内容最后一次被修改的时间。
变化时间(-ctime, change time): 文件元数据(metadata,例如文件权限或所有权)最后一次改变的时间。
-atime, -mtime, -ctime 可作为 find 的选项, 它们以整数值给出,计量单位是“天”。这些整数值通常还带有 - 或 + ; - 表示 小于, + 表示 大于。
1 2 3 4 5 6 7 8
打印出在最近 7 天被访问过的所有文件: $ find . -type f -atime -7 -print 打印出恰好在7天前被访问过的所有文件: $ find . -type f -atime 7 -print 打印出超过 7 天被访问过的所有文件: $ find . -type f -atime +7 -print
-atime, -mtime, -ctime 它们计量单位是“天”。还有其他一些基于时间的参数是以“分钟”作为计量单位的。它们分别是:
-amin(访问时间)
-mmin(修改时间)
-cmin(变化时间)
-size 选项可以根据文件大小过滤,基于文件大小可以这样搜索:
1 2 3 4 5 6 7 8
$ find . -type f -size +2k # 大于 2KB 的文件 $ find . -type f -size -2k # 小于 2KB 的文件 $ find . -type f -size 2k # 等于 2KB 的文件, 需要注意的是:可能会向上进行圆整, -size 7k , 可能会找出 6.8k 的文件
除了k之外,还可以用其他文件大小单位:
b 块(512字节)
c 字节
w 字(2字节)
k 千字节
M 兆字节
G 吉字节
基于文件权限和所有权搜索find 命令
-perm -mode
All of the permission bits mode 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
EXAMPLES section for some illustrative examples.
-perm /mode
Any of the permission bits mode are set for the file. Symbolic modes are
accepted in this form. You must specify 'u', 'g' or 'o' if you use a sym-
bolic mode. See the EXAMPLES section for some illustrative examples. If no
permission bits in mode are set, this test matches any file (the idea here is
to be consistent with the behaviour of -perm -000).
-perm +mode
Deprecated, old way of searching for files with any of the permission bits in
mode set. You should use -perm /mode instead. Trying to use the '+' syntax
with symbolic modes will yield surprising results. For example, '+u+x' is a
valid symbolic mode (equivalent to +u,+x, i.e. 0111) and will therefore not
be evaluated as -perm +mode but instead as the exact mode specifier -perm
mode and so it matches files with exact permissions 0111 instead of files
with any execute bit set. If you found this paragraph confusing, you're not
alone - just use -perm /mode. This form of the -perm test is deprecated
because the POSIX specification requires the interpretation of a leading '+'
as being part of a symbolic mode, and so we switched to using '/' instead.
find -perm参数的详细说明:
-perm
MODE: 精确匹配,文件权限“刚好等于”MODE, 必须和指定的权限位 一模一样
-MODE: 文件权限能完全包含此MODE时才符合条件,“必须全部包含”了所有指定的相应权限位即可
/MODE: 任意一位匹配即满足条件,“任意包含一个指定权限位”的文件都符合。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
# ls -l total 8 -rw-r--r--. 1 root root 77 Mar 27 23:14 a.txt -------r--. 1 root root 0 Mar 27 23:15 b.txt -rwxr-xr-x. 1 root root 32 Mar 27 23:14 first.sh MODE: 必须完全精确匹配, 只有权限为 644 的才会找到 # find . -perm 644 ./a.txt -MODE: 对应的权限位必须完全包含。rw-r--r-- , 必须包含这几个权限位即可符合条件 # find . -perm -644 . ./a.txt ./first.sh /MODE: 对应的权限位,只要匹配 MODE 任意一位即可。 rw-r--r-- # r-------- 匹配 # -w------- 匹配 # ---r----- 匹配 # ------r-- 匹配 # rwxr-xr-x 匹配 # find . -perm /644 . ./a.txt ./first.sh ./b.txt
结合find执行命令或动作
find 命令可以借助选项 -exec 与其他 shell 命令进行结合。相应语法格式为 -exec command {} \;