Linux指令:find

find指令最近拿来去查找文件,但是只会使用个find -name “文件名”,这就一点不洋气例如,于是这里今晚来学学。

find能干啥?

find命令,查找文件和目录

find查找命令是Linux系统中最重要和最常用的命令之一。

查找用于根据与参数匹配的文件指定的条件来搜索和查找文件和目录列表的命令。

查找可以在各种条件下使用,您可以通过权限,用户,组,文件类型,日期,大小等可能的条件查找文件。

find pathname -option [-print ] [ -exec | -ok command ] {} ;

pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。

-print: find命令将匹配的文件输出到标准输出。

-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为command { } ;,注意{ }和\;之间的空格。

-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

find怎么用?

第一部分:查找名称查找文件的基本查找命令

-name filename //查找名为filename的文件。

-iname filename //与-name相同,查找名为filename的文件,但忽略大小写,即不区分大小写。

-type b/d/c/p/l/f //按照文件类型查找,查是块设备、目录、字符设备、管道、符号链接、普通文件。 块设备:随机读取,例如硬盘 字符设备:顺序读取,例如键盘、鼠标

-type查找某一类型的文件,诸如:
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。
s -socket文件

在这里插入图片描述

第二部分:根据他们的权限查找文件

-perm //按执行权限来查找

-empty //查找长度为零(即空文件)的文件 r 4 w 2 x 1

在这里插入图片描述
7.找到一个名为test.c的文件并将其删除

# find -type f -name test.c -exec rm -f {} ;

8.查找和删除多个文件,如.mp3或.txt

# find -type f -name “.txt" -exec rm -f {} ;
# find -type f -name ".mp3” -exec rm -f {} ;

9.在特定路径下查找所有空文件。

# find /tmp -type f -empty

10.在特定路径下查找所有空目录

# find /tmp -type d -empty
  1. 查找空文件或空目录
# find ./ -empty

13.查找空文件并删除

# find ./ -empty -name test.a -print -delete

第三部分:基于所有者和组的搜索文件

-user username #按文件属主来查找
-group groupname #按组来查找
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存(孤儿文件 没有所有者的文件)
1.查找所有者root的、名为test.c的文件。
# find / -user root -name test.c
2.查找/ home目录下属于Group Developer的所有文件。
# find / -group developer
3.查找无效属组的所有文件
# find / -nogroup
4.查找无效属主的所有文件
# find / -nouser

第四部分:根据日期和时间查找文件和目录

-mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime -n +n #按文件访问时间来查,-n指n天以内,+n指n天以前
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
注:我们可以使用stat命令来查看一个文件的时间信息。

在/root下查找文件更新日是在距现在时刻二天以内的文件
# find /root/ -mtime -2
在/root下查找文件更新日是在距现在时刻二天以上的文件
# find /root/ -mtime +2
3.在/root下查找文件更新日是在距现在时刻一天以上二天以内的文件
# find /root/ -mtime 2
注:-atime、-ctime与-mtime用法类似,可以自行查看man帮助。
4.查找文件更新日是在距现在时刻二分钟以内的文件
#find ./ -mmin -2
5.查找文件更新日是在距现在时刻二分钟以上的文件
#find ./ -mmin +2
6.查找文件更新日是在距现在时刻一分钟以上二分钟以内的文件
#find ./ -mmin 2
注:-amin、cmin与-mmin用法类似,可以自行查看man帮助。
7.查找文件更新时间比文件abc的内容更新时间新的文件
#find ./ -newer abc
查找更改时间比文件file1新但比文件file2旧的文件。-newer file1 ! file2
8.查找文件访问时间比文件abc的内容更新时间新的文件
#find ./ -anewer abc
9.查找所有被修改超过50天以及少于100天的文件。
# find / -mtime +50 -mtime -100

第五部分:根据大小查找文件

-size [+/-]n
按照文件大小查询文件,+n表示文件大小大于n,-n表示文件大小小于n。常用单位:k, M, G
# find /tmp -size 2M //查找在/tmp 目录下等于2M的文件
# find /tmp -size +2M //查找在/tmp 目录下大于2M的文件
# find /tmp -size -2M //查找在/tmp 目录下小于2M的文件
# find /tmp -size +50M -size -100M //找到大于50MB且小于100MB的所有文件。
#find / -type f -name “.mp3” -size +10M -exec rm {} ; //查找超过10MB的所有.mp3文件,并使用一个命令删除它们。
1.find 命令默认会递归查找整个目录树,而这非常消耗时间和资源。好在目录查找的深度可以手动指定。例如我们只想查找一到两层以内的子目录,可以通过 maxdepth 选项来指定。
# find ./test -maxdepth 2 -name ".php"
# find ./test -maxdepth 1 -name ".php"
第二个示例中指定了maxdepth 为1,表明最多只查找一层内的子目录,也就是只查找当前文件夹。
当我们只想在当前目录下查找,而不是查找整个目录树的时候,这个选项会特别有用。
与maxdepth 选项相似,还有一个选项叫做 mindepth ,正如名字所表示的那样,它会至少到达第 N 层子目录后才开始查找文件。
2.反向查找
除了查找满足条件的文件之外,我们还可以查找不满足条件的所有文件。当我们知道要在查找中排除哪些文件时,这个选项就能发挥作用了。
$ find ./test -not -name “.php”
./test
./test/abc.txt
./test/subdir
在上面的示例中我们找到了所有扩展名不是 php 的文件和文件夹。我们也可以使用感叹号 ! 来代替 -not。
find ./test ! -name “.php”
结合多个查找条件
我们可以同时使用多个查找条件来指定文件名并排除某些文件。
$ find ./test -name ‘abc’ ! -name ‘.php’
./test/abc.txt
./test/abc
上面的命令查找所有以abc 开头并且不含 .php 扩展名的文件。这个示例展现了 find 命令自带的查找表达式是多么的强大。
3.OR 操作符
当我们使用多个查找条件时, find 命令会将它们通过 AND 操作符(-a)结合起来,也就是说,只有满足所有条件的文件才会被列出。不过,如果我们需要进行基于 OR 运算的查找时,可以加上 -o开关。
$ find -name ‘.php’ -o -name ‘*.txt’
./abc.txt
./subdir/how.php
./abc.php
./cool.php
上面的命令查找所有以 .php 结尾或者以 .txt 结尾的文件。
4.-prune:不在当前指定目录中查找
例如:已知在/etc,/etc/pam.d以及/usr/bin目录下都有一个名为passwd的文件,我们看一下-prune的作用
# find / -name passwd  //在根目录及其子目录下查找名为passwd的文件
./usr/bin/passwd
./etc/passwd
./etc/pam.d/passwd
# find / -path /etc -prune -o -name passwd -print  //在根目录及其子目录(除了/etc目录及其子目录)下查找名为passwd的文件。
./usr/bin/passwd
# find / ( -path /usr/bin -o -path /etc ) -prune -o -name “passwd” -print  //在根目录及其子目录(除了/usr/bin目录及其子目录;/etc目录及其子目录)下查找名为passwd的文件。由于命令行不能直接识别圆括号,因此要用转义字符\,在和前后都要有空格。

转载前辈的文章,做个记录

参考链接:
https://blog.csdn.net/m0_46517180/article/details/114387542

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值