目录
find 是 Linux 中一个非常强大的命令,用于在文件系统中查找文件和目录。它的功能非常丰富,可以通过多种条件来定位文件和目录
1、基本格式
find [路径] [选项] [表达式]
- 路径:指定查找的起始目录。如果不指定路径,默认为当前目录。
- 选项:用于控制查找行为,例如 -type、-name 等。
- 表达式:用于定义查找条件,例如文件名、文件类型、文件大小等。
1.1、常用的选项
| 选项 | 说明 | 示例 |
| -name | 按照名称查找 |
|
| -type | 按照类型查找 |
|
| -size | 按照大小查找 |
单位有 c 、k 、M 、G |
| -mtime -atime -ctime | 按照时间属性 |
注意:ctime 表示 修改了文件的属主或属组属性 mtime 表示修改了文件内容。 这两者有区别 |
| -perm | 按照权限查找 | -perm 644 : 查找权限为644的文件或者目录 |
| -fprint | 把查找的结果写入文件中而不是打印到屏幕 | -fprint /root/test.txt 把查找结果写入/root/test.txt文件中 |
| -depth | 按照深度查找目录或者文件。主要用于限定查找范围的 |
|
2、用法
2.1、常见用法示例
- 按照名字查找
示例1:根目录下查找名称为test1.txt的文件
find / -name test1.txt
示例2:查找根目录下所有以txt结尾的文件
find / -name *.txt
示例3:查找根目录下所有以txt结尾的文件,并且忽视大小写
find / -iname *.txt
示例4:将查找结尾为txt文件的结果写入/root/test.txt文件中
find / -iname *.txt -fprint /root/test.txt
- 根据文件类型查找
示例1: 查找/etc 目录下所有的文件
find /etc -type f
示例2:查找/usr/local 目录下所有的目录
find /usr/local -type d
示例3:查找/usr/bin 目录下所有的软链接文件
find /usr/bin -type l
- 按照深度查找
示例1:查找 /etc 目录及其直接子目录(最多两层深度)中的所有目录
find /etc -maxdepth 2 -type d
- 按照文件大小查找
示例1: 在/etc目录下查找超过10M 大小的文件
find /etc -size +10M
- 按照权限查找
示例1:查找/etc 目录下权限为600的文件
find /etc -perm 600
示例2: 查找/usr/local/bin 下排除权限600的文件
find /usr/local/bin ! -perm 600
-
按照时间查找
示例1:查找/var/log 目录下最近30天内访问的文件
find /var/log -atime -30 -type f
示例2:查找 /etc 目录下最近30天内元数据(如权限、所有者、链接数等)被修改的文件
find /etc -ctime -30 -type f
示例3:查找 /var/log 目录及其子目录中,最近 30 天内文件内容被修改过的普通文件
find /var/log -mtime -30 -type f
2.2、高级用法
2.2.1、与 其他命令配合使用
示例1:查找/var/log 目录下所有修改时间超过 30 天的普通文件,然后删除它们
find /var/log -type f -mtime +30 -exec rm -f {} \;
示例2:查找/var/log目录下 修改时间在30天之内的文件并把它们复制到/tmp目录下
find /var/log -mtime 30 -type f -exec cp {} /tmp \;
示例3: 与ok选项配合使用,在执行操作前会提示用户
find /var/log -mtime 30 -type f -ok rm \;
2.2.2、使用逻辑运算符组合多个条件
常见的逻辑运算符
| 逻辑运算符 | 说明 |
| -a 或者 -and | 逻辑与,只有当所有条件满足时,文件或者目录才会被匹配 |
| -o 或者 -or | 逻辑或,只要满足其中一个条件,文件或者目录就会被匹配 |
| !或者-not | 逻辑非,用于否定一个条件 |
示例1:使用 -or
查找最近 30 天内被访问过或大小大于 1MB 的文件
find /var/log -type f \( -atime -30 -or -size +1M \)
*注意:为了避免解析错误,建议将 -or 的条件用括号 () 包裹起来
示例2:使用-and
查找 /var/log 目录中,最近 30 天内被访问过并且大小大于 1MB 的普通文件
find /var/log -type f -atime -30 -and -size +1M
示例3:使用 -not
查找 /var/log 目录中,最近 30 天内被访问过但大小小于 1MB 的普通文件
find /var/log -type f -atime -30 -and -not -size +1M
*注: -not 表示取反


2万+

被折叠的 条评论
为什么被折叠?



