Linux命令之 find命令
warning:
这篇文章距离上次修改已过1969天,其中的内容可能已经有所变动。
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
最近2天访问的文件根据关键字查找
find . -name "*.log"
“.log 结尾的文件”按照目录或文件的权限来查找文件
find /opt/ -perm 777
find /opt/ -perm -007
777权限的文件按类型
find . -type f -name "*.log"查找当前所有目录并排序
find . -type d | sort
查找子目录并排序按大小查找文件
find . -size +1024c -print
当前目录下大于1024B的文件正则匹配文件名
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 \; 