find 命令用于文件搜索,在linux 系统中是非常常用的一个命令。
find 的命令中不仅仅有选项,还有测试、动作类型的参数,其中一个参数的运行结果可能会影响到后续参数的处理。
命令格式:
find [path] [options] [test] [action]
path:
路径,可以是绝对路径(/bin),也可以是相对路径( ./ ),也可以指定多个路径。
options
选项有很多,我们这里列出几个比较重要的选项
选项 | 含义 |
---|---|
-depth | 先搜索子目录,在搜索本目录 |
-follow | 跟随符号连接符 |
-maxdepths N | 最多搜索 N 层目录 |
-mount | 不搜索其他 文件系统中的目录 (window 和 linux 属于不同文件系统) |
test
参数也有很多,我们这里只列出常用的选项。每个测试返回的结果有两种:true 或 false。find 命令开始工作时,它按照顺序将定义的每种 测试依次应用到他搜索到的每个文件上。如果一个测试返回false,find 命令则停止处理当前搜索到的文件,并继续搜索,如果测试返回 true,find 命令则继续对文件的后续操作。
测试 | 含义 |
---|---|
-atime N | 文件在N天之前被最后访问过 |
-mtime N | 文件在N天之前被最后修改过 |
-name pattern | 文件名匹配提供的模式 pattern,在Shell脚本中为了确保 pattern 能够传递给 find 命令,而不是由 Shell 处理,pattern 总是用引号括起来 |
-newer otherFile | 比 otherFile 新的文件 |
-type c | 文件类型为c,c 是特殊类型,最常见为 d(目录),f(普通文件) |
-user username | 文件拥有者为指定的用户 username |
在 find 命令中还可以使用操作符,进行组合测试,操作符如下:
操作符,短格式 | 操作符,长格式 | 含 义 |
---|---|---|
! | -not | 测试取反 |
-a | -and | 两个测试必须都为真 |
-o | -o | 两个测试,有一个必须为真 |
action
查找到满足条件的文件后,后续操作。
动作 | 含义 |
---|---|
-exec command | 执行一条命令。这个动作必须以 \; 字符结束。命令中 {} 代表查找到的文件的全路径 |
-ok command | 与 -exec 命令相似,但是他会针对每一个处理的文件,提示用户确认 |
打印文件名 | |
-ls | 对当前的文件使用 ls-dils |
示例:
1. 查找当前目录下名为 world.cpp 的文件:
find . -name world.cpp
2. depth,先查找子目录
find test -depth
输出结果:
test/test1/test2
test/test1
test
find test
输出结果:
test
test/test1
test/test1/test2
3. 搜索当前目录下,比 test.cpp 文件要新的普通文件,并打印
find . -newer test.cpp -type f -print
4. 搜索当前目录下比 test.cpp 文件要新的普通文件,并删除
find . -newer test.cpp -type f -exec rm -rf {} \;