Linux命令之 find命令
warning:
这篇文章距离上次修改已过1750天,其中的内容可能已经有所变动。
find命令常用于在Linux文件系统中搜索文件。其提供了十分强大的条件查找功能,导致他的选项多且繁琐。
常用文件搜索命令 | 说明 |
---|---|
which | 查看可执行文件的位置 |
whereis | 查看文件的位置 |
locate | 配合数据库查看文件位置 |
find | 实际搜寻硬盘查询文件名称 |
如果你需要执行一个非常消耗资源的find命令时,建议放在后台执行,因为可能会花费很长时间
命令语法
find <路径> [参数] [表达式]
- 默认路径为当前目录;
- 默认表达式为
-print
; 表达式可能由下列成份组成:
- 操作符
- 选项
- 测试表达式
- 动作
附加参数
参数 | 说明 |
---|---|
<路径> | 查找的目录路径。例如:用. 来表示当前目录;用/ 来表示系统根目录。用~ 代表$HOME 目录。 |
find命令将匹配的文件输出到标准输出。 | |
-exec | find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为command {} \; ,注意{} 和\; 之间的空格。 |
-ok | 和-exec 的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。 |
-name | 按照文件名查找文件,支持正则匹配,记住要用引号将文件名包裹起来,防止出现奇怪的问题 |
-perm | 按照文件权限来查找文件。 |
-prune | 不在当前指定的目录中查找,如果同时使用-depth 选项,那么-prune 将被忽略。 |
-user | 按照文件所有者来查找文件。 |
-group | 按照文件所属的组来查找文件。 |
-mtime -n +n | 按照文件的更改时间来查找文件, -n 表示文件更改时间距现在n天以内,+n 表示文件更改时间距现在n天以前。 |
-nogroup | 查找无有效所属组的文件,即该文件所属的组在/etc/groups 中不存在。 |
-nouser | 查找无有效属主的文件,即该文件的属主在/etc/passwd 中不存在。 |
-newer file1 ! file2 | 查找更改时间比文件file1新,但比文件file2旧的文件。 |
-type | 查找某一类型的文件,诸如: • b - 块设备文件 • d - 目录 • c - 字符设备文件 • p - 管道文件 • l - 符号链接文件 • f - 普通文件 |
-size n:[c] | 查找文件长度为n块的文件,带有c 表示文件长度以字节计。 |
-depth | 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。 |
-fstype: | 查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab 中找到,该配置文件中包含了本系统中有关文件系统的信息。 |
-mount: | 在查找文件时不跨越文件系统mount 点。 |
-follow: | 如果遇到符号链接文件,就跟踪至链接所指向的文件。 |
-cpio: | 对匹配的文件使用cpio命令 ,将这些文件备份到磁带设备中。 |
-amin n | 查找系统中最后N分钟访问的文件 |
-atime n | 查找系统中最后n*24小时访问的文件 |
-cmin n | 查找系统中最后N分钟被改变文件状态的文件 |
-ctime n | 查找系统中最后n*24小时被改变文件状态的文件 |
-mmin n | 查找系统中最后N分钟被改变文件数据的文件 |
-mtime n | 查找系统中最后n*24小时被改变文件数据的文件 |
常用范例
查找指定时间内修改过的文件
find -atime -2

根据关键字查找
find . -name "*.log"

按照目录或文件的权限来查找文件
find /opt/ -perm 777
find /opt/ -perm -007

按类型
find . -type f -name "*.log"
查找当前所有目录并排序
find . -type d | sort

按大小查找文件
find . -size +1024c -print

正则匹配文件名
find . -name "[2-4]*" -print

查找时忽略某个目录
find . -path "./dir2" -prune -o -print
查找时忽略某些目录
find . \( -path "./dir1" -o -path "./dir3" \) -prune -o -print

扩展:关于exec选项
find <查询规则> -exec <command> {} \;
-exec选项
的一些说明:
command
:是执行find命令后需要执行的Linux命令。{}
:表示前面find命令查找出来的文件名(们)。\;
:以;
为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。- 理论上任何形式的命令都可以在
-exec
选项中使用。但是某些发行版会做出一些限制。 - 建议同时使用
print
选项,防止某些幺蛾子
前一个命令的结果充当-exec选项中的参数
find . -type f -exec ls -l {} \;
在目录中查找更改时间在n日以前的文件并删除它们
find . -type f -mtime +14 -exec rm {} \;
在目录中查找更改时间在n日以前的文件并删除它们,在删除之前先给出提示
find . -name "*.log" -mtime +5 -ok rm {} \;
-exec中使用grep命令
find /etc -name "passwd*" -exec grep "root" {} \;
find命令首先匹配所有文件名以passwd开头的文件,然后通过grep命令检查在这些文件中是否存在一个root字符串。
查找文件移动到指定目录
find . -name "*.log" -exec mv {} .. \;
用exec选项执行cp命令
find . -name "*.log" -exec cp {} test \;