03
2024
04
09:21:46

find命令 ./ 是当前目录的意思

前言

一、功能描述:
使用find命令可以将文件系统内符合条件的文件列出来,可以指定文件的名称、类别、时间、大小及权限等不同信息的组合,只有完全相符的文件才会被列出来。


find命令模糊搜索是比较消耗系统资源的,如果服务器负载比较高,尽量避开业务高峰期使用find命令。

命令语法:

find [路径] [选项]

语法选项

选项含义
-name <文件名>文件名搜索
-iname <文件名>忽略大小写
-user <用户名>按文件属主查找
-group <组名>按文件所属组查找
-size n[ckMG]按文件大小查询,n代表数字,c代表字节,k代表KB,G代表GB
-type <文件类型>按文件类型查找
-nouser查找没有用户的文件
-nogroup查找没有组群的文件
-atimen 在过去n天内被访问过的文件(atime表示文件中的数据库最后被访问的时间)
-aminn 在过去n分钟内被访问过的文件
-ctimen 在过去n天内被改动过的文件(ctime表示文件的元数据发生变化,比如权限,所有者)
-ctimen 在过去n分钟内被改动过的文件
-mtimen 在过去n天内被修改过的文件(mtime表示文件内容被修改的最后时间)
-mtimen 在过去n分钟内被修改过的文件

实例 1

按文件名查找

// 查找/test目录下名称为abc的文件
[root@cnLinuxer ~]# find /test -name abc**/test/abc
//查找根目录下abc文件,不区分大小写
[root@cnLinuxer ~]# find /test -iname abc/test/abc/test/ABC

实例 2

按文件大小查找

// 查找/data目录下超过10M的文件[root@cnLinuxer ~]# find /date -size +10M
 // 查找/data目录下小于1G的文件[root@cnLinuxer ~]# find /date -size -1G
 // 查找/data目录下等于98k的文件[root@cnLinuxer ~]# find /date -size 98k

实例3

按时间查找

// 查找1天内文件内容被修改的文件
[root@cnLinuxer ~]# find / -mtime -1 -type f
 
//查找1天前文件内容被修改的文件
[root@cnLinuxer ~]# find / -mtime +1 -type f
 
// 查找一天前被访问的文件
[root@cnLinuxer ~]# find / -atime +1 -type f
 
// 查找一天内被访问的文件
[root@cnLinuxer ~]# find / -atime -1 -type f
 
// 查找一天内状态被改变的文件
[root@cnLinuxer ~]# find / -ctime -1 -type f
 
// 查找10分钟前状态被改变的文件
[root@cnLinuxer ~]# find / -cmin +60 -type f

实例4

按权限查询

//查找/test目录下权限为777的所有文件
[root@cnLinuxer ~]# find /test -perm 777

实例5

按属主及属组查询

// 查找属主为esight的文件[root@cnLinuxer ~]# find / -user esight -type f
 // 查找无属主的文件[root@cnLinuxer ~]# find / -nouser -type f
 // 查找属组为esight的文件[root@cnLinuxer ~]# find / -group esight -type f
 // 查找无属组的文件[root@cnLinuxer ~]# find / -nogroup -type f

实例5

执行命令

// 查找te.txt并删除,删除前提示[root@cnLinuxer ~]# find /test -name "te.txt" -ok rm {} \;< rm ... /test/te.txt > ? 
 
// 查找te.txt 并备份为te.txt.bak[root@cnLinuxer ~]# find /test -name "te.txt" -exec cp {} {}.bak \;

总结

find 像是一组排好的物品,碟片、队伍,查找时。find 路径(在那查找) 选项 (按哪个属性查找) 可以是文件名 时间 大小 属主 权限查找


使用 find ./ 这样的命令时,你正在从当前目录(./)开始搜索文件和目录。

下面是 find 命令的详细解释:

基本语法

bashfind [路径...] [表达式]
  • [路径...]:这是你想要开始搜索的目录。. 表示当前目录,/ 表示根目录。你也可以指定其他目录,如 /home/user

  • [表达式]:这是 find 命令的核心部分,用于定义搜索条件和要执行的操作。

表达式

表达式由一个或多个测试条件和一个或多个操作组成。测试条件用于确定哪些文件或目录应该被选中,而操作则定义了对于每个选中的文件或目录应该执行什么操作。

测试条件

  • -name:按名称搜索文件和目录。

  • -type:按类型搜索(如普通文件、目录、符号链接等)。

  • -size:按大小搜索。

  • -mtime:按修改时间搜索。

  • -atime:按访问时间搜索。

  • -ctime:按状态改变时间搜索。

  • -exec:执行指定的命令。

  • -user:按文件拥有者搜索。

  • -group:按文件所属组搜索。

  • …等等。

操作

  • -print:打印文件或目录的名称。

  • -exec:执行指定的命令。

  • -delete:删除文件或目录。

  • …等等。

示例

  1. 查找当前目录及其子目录下的所有 .txt 文件:

bashfind ./ -name "*.txt"
  1. 查找当前目录及其子目录下最近 7 天内被修改过的文件:

bashfind ./ -mtime -7
  1. 查找当前目录及其子目录下大于 1MB 的文件并打印它们的名称:

bashfind ./ -size +1M -print
  1. 查找当前目录及其子目录下所有名为 myfile 的文件并删除它们:

bashfind ./ -name "myfile" -exec rm {} \;

注意:在 -exec 操作中,{} 是一个特殊的占位符,它会被替换为当前找到的文件或目录的名称。\; 表示 -exec 操作的结束。

find 命令的功能非常强大,可以通过组合不同的测试条件和操作来执行复杂的搜索任务。要获取更详细的信息和更多的示例,你可以查看 find 命令的手册页,通过运行 man find 命令来访问。




1、-name   //按名字查找

  find  ./ -name '*.sh'

2、-type  //按类型查找

find ./ -type  f (d/p/c/b/s/l)  ---普通文件(目录/管道/字符设备/块设备/socket./符号连接)

3、-size   //按大小查找

默认大小单位是512B(0.5K即:一个扇区的大小)

find ./ -size 1

find ./ -size +3 -size -7M    查找大小 大于3M小于7M的文件。(M是大写)

find  ./ -size +47k   -size -89k   (k是小写)

4、-maxdepth  //确定递归的次数

find ./ -maxdepth 1    -type  d        //递归一次,即仅找第一层目录

find ./ -maxdepth 2   -type  d          //递归2次,即会找到第二层目录

5、exec  //对find的结果集进行操作。

find  ./ -name '*.sh' | ls -lh    ----->会发现所有的文件都显示出来了

正确写法:

find  ./ -name '*.sh' -exec  ls -lh  {}  \;

exec 跟 xargs类似,{}中执行的是find  ./ -name '*.sh' 的结果;

\; 是转义分号字符,

find  ./ -name '*.sh' -ok  rm -r  {}  \;  将exec换成ok, 删除操作会进行提示,我们输入y or n  来进行操作

6、 xargs   //没有-

不用exec的话,可以使用xargs ,此时需要用管道

exec:是将find的结果集一次性的投入到缓冲区后执行后续的命令,缓冲区有可能充满;

xargs:是将find的结果集分批投入缓冲区。

find  ./ -name '*.sh' | xargs  ls -lh  

xargs 会以空格、换行符或制表符来区别结果集

7、-print0   //在结果集的末尾添加null(\0)

find  ./ -maxdepth 1 -type f -print0 | xargs  -0 ls -lh  

xargs  -0  表示不以默认的空格、换行符或制表符来区别,而是换成null(\0)

防止有的文件名中带空格,会识别错误  如类似touch  test\ teet1  (转义空格)

exec不会出现这种问题。

8、//按修改时间来查找文件

       -atime    //access 访问时间   按天

       -amin                                     按分钟

       -mtime   //modify  文件内容修改时间 

                 find ./ -name  "syslong.*.gz"  -mtime +5 -exec ls -lh {} \;           +5表示5天前的文件

                 find ./ -name  "syslong.*.gz"  -mtime -5 -exec ls -lh {} \;            -5表示5天内的文件

       -mmin

       -ctime  // 文件的属性修改时间

       -cmin

linux日志文件存放在 /var/log/syslog目录下




Find命令格式:

find [-H] [-L] [-P] [-D debugopts] [-O level] [path...] [expression]

find命令选项:

-name:使用文件名查找,支持使用通配符

-iname:使用文件名查找,不区分大小写。

-perm:使用文件权限查找

/+权限:匹配任何一类(u,g,o)的权限,符合"权限"内容就输出。

-+权限:u、g、o中只要有一个为"权限"内容,u、g、o都要匹配为"权限"的内容

-user和nouser:查找文件属于u的文件和查找没有属主的文件

-group和-nogroup: 查找文件属于g的文件和查找没有属组的文件

-uid和-gid:查找文件的uid为指定uid的文件和查找文件的gid为指定gid的文件

-type:根据文件类型来查找文件

f:普通文件

d:目录

l:符号连接文件

b:块设备文件

c:字符设备文件

p:命名管道文件

s:套接字文件

-regex:匹配整个文件路径字符串

-size:以文件大小来查找

-atime、-mtime和-ctime:根据时间来查找文件(以天为单位)

-amin、-mmin和-cmin:根据时间来查找文件(以分钟为单位)

-print:默认处理动作

-ls:对查找到的每个文件做"ls -l"动作

-delete:删除查找到的文件

-fls:后面指定一个路径,表示把查找到的内容保存到所指定的路径中

-ok:后面跟指令,表示执行指令对所查到的文件之前需要用户确认

-exec:后面跟指令,表示执行指令对所查到的文件之前无需用户确认

-a:组合查找条件的"与"

-o:组合查找条件的"或"

-not或者!: 组合查找条件的"非"(组合查找条件中优先级为"非"先于"与"先于"或",提升优先级可用())

例子:查找/var目录属主为root,且属组为mail的所有文件;

6f51e38da134ba154477729c03f8c6fe.png

2、查找/usr目录下不属于root、bin或hadoop的所有文件;

ada9bfe8c8771766e61a89835d480d95.png

查找/etc目录下最近一周内其内容修改过,且属主不为root或hadoop的所有文件;

e46198075f1f1483f32ed6841abdc3c3.png

查找当前系统上没有属主或属组,且最近一周内曾被访问过的所有文件;

f11c493a43723d769cf223a563203c33.png

查找/etc目录下大于20k且类型为普通谁的的所有文件;

0b06b93566b6be6b37fe341633a5647a.png

查找/etc目录下所有用户都没有写权限的文件;

83f937f348576ea78389ba9df6bebfbd.png

查找/etc目录下至少有一类用户没有执行权限的文件;

7e418aa0dd692a74368d0e1300d3207d.png

查找/etc/init.d目录下,所有用户都有执行权限,且其它用户拥有写权限的文件;

26bafa90d917674977948386c3169e76.png




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://hqyman.cn/post/5627.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: