find命令——根据路径和条件搜索指定文件

这篇具有很好参考价值的文章主要介绍了find命令——根据路径和条件搜索指定文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

find命令的功能是根据给定的路径和条件查找文件或目录,可以使用的参数很多,并且支持正则表达式,结合管道符后能够实现更加复杂的功能,是系统管理员和普通用户日常工作必须掌握的命令之一。

find命令是对磁盘文件系统进行搜索,因此在服务器负载较高时,不建议使用find命令对整个磁盘系统进行搜索,而是使用locate命令进行模糊搜索。

find命令的语法格式如下:

find [路径] [选项] [动作]

其中:

路径指明在什么地方开始查找,比如根目录(/),或者指定目录/usr/share等。

动作主要包括以下

  • -print:将找到的文件打印到屏幕,该动作是默认操作,可以省略不写。
  • -delete:将找到的文件删除
  • -ls:将找到的文件详细信息显示出来
  • -prune:若满足条件的文件是目录,则不进入该目录查找
  • -exec command:command为其它命令,比如ls及其选项,其含义是将找到结果用command命令进行处理。同时,command后面必须以【{} \;】结束。
  • -ok command:与上面的-exec类似,不同的是在执行后面的command时,-exec选项不会停下来询问用户,而-ok选项会每执行一次就停下来询问一次,这对删除等破坏性操作很有好处。

常用的选项主要分成以下几类:

一、根据文件名查找

  • -name:后接文件名,表示根据指定的文件名搜索,文件名可以使用通配符以进行模糊查找。
  • -iname:文件名不区分大小写

示例如下:

#精确查找,默认动作为-print
[root@myEuler ~]# find /etc -name sshd_config
/etc/ssh/sshd_config

#模糊查找。指定动作为-ls
[root@myEuler ~]# find /etc -name '*.cnf' -ls
   130749      4 -rw-r--r--   1 root     root          412 12月 27 17:57 /etc/pki/tls/ct_log_list.cnf
   130751     12 -rw-r--r--   1 root     root        10909 12月 27 17:57 /etc/pki/tls/openssl.cnf

[root@myEuler ~]# find /etc -name '*.cnf' -exec ls -l {} \;
-rw-r--r--. 1 root root 412 12月 27 17:57 /etc/pki/tls/ct_log_list.cnf
-rw-r--r--. 1 root root 10909 12月 27 17:57 /etc/pki/tls/openssl.cnf

#文件名包括conf的是目录,则跳过不递归查找
[root@myEuler ~]# find /etc -name '*conf*' -prune

#在dir1目录中查找所有以file开头的文件,找到则删除
[root@myEuler ~]# find dir1 -name file* -ok rm -r {} \;
< rm ... dir1/file3 > ? n
< rm ... dir1/file6 > ? n

#不区分大小写
[root@myEuler ~]# find dir1 -iname file*
dir1/file1
dir1/FILE6

二、根据日期和时间查找

与日期有关的选项有-atime(访问时间)、-ctime(更改文件属性的时间)、-mtime(修改文件内容的时间),以下-mtime为例:

  • -mtime N:N为整数,意为N天前的那一天内有修改过内容的文件
  • -mtime +N:找出N天以前(不含第N天本身)有修改过内容的文件
  • -mtime -N:找出N天以内(含N天本身)到现在有修改过内容的文件
  • -newer FILE:列出比指定文件FILE还要新的文件

示例如下,假如今天是8月8日:

#找出过去24小时内文件内容有修改过的文件
[root@myEuler ~]# find /var -mtime 0

#找出8月6日那一天内文件内容有修改过的文件
[root@myEuler ~]# find /var -mtime 2

#找出8月5日及之前(包括8月5日那一天)文件内容有修改过的文件
[root@myEuler ~]# find /var -mtime +2

#找出从8月6日开始到现在有修改过文件内容的文件
[root@myEuler ~]# find /var -mtime -2

#找到比dir1/file1还要新的文件
[root@myEuler ~]# find /var -newer dir1/file1

相对应的,与时间有关的主要选项有-amin、-cmin和mmin,表示以所经历的分钟数进行搜索,下面以-cmin为例说明。

  • -cmin N:N为整数,意为N分钟前的那一分钟内有修改过权限等属信的文件
  • -cmin +N:找出N分钟以前(不含第N分钟本身)有修改过权限等属信的文件
  • -cmin -N:找出N分免钟以内(含N分钟本身)到现在被修改过内容的文件
#在当前目录下的dir1中查找前10分钟时文件权限有修改过的文件
[root@myEuler ~]# find dir1 -cmin 10

#在当前目录下的dir1中查找10分钟以前文件权限有修改过的文件
[root@myEuler ~]# find dir1 -cmin +10

#在当前目录下的dir1中查找最近10分钟内文件权限有修改过的文件
[root@myEuler ~]# find dir1 -cmin -10

三、根据文件归属查找

与文件归属有关的常用选项如下:

  • -uid N:N为整数,即用户账号的ID号(UID),表示根据文件属主的UID查找
  • -gid N:N为整数,即用户组名称的ID号(GID),表示根据文件属组的GID查找
  • -user username::username就是用户账号名称,表示根据文件属主名称查找
  • -group groupname:groupname为用户组的名称,表示根据文件属组名称查找
  • -nouser:查找文件的属主没有在/etc/passwd文件中的文件
  • -nogroup:查找文件的属组没有在/etc/gpasswd文件中的文件

示例如下:

[root@myEuler ~]# find /home -user zhangsan

[root@myEuler ~]# find /home -uid 1000

#在整个文件系统中查找属主不在/etc/passwd中的文件
[root@myEuler ~]# find / -nouser

四、根据文件权限查找

与文件权限有关的选项主要有:

  • -perm mode:mode为权限模式,比如权限为-rwxr--r--的对应的mode值为0744,表示查找权限刚好等于mode指定的值的文件。
  • -perm -mode:查找文件权限必须全部囊括mode所表示的权限,比如-mode指定为0744,由于rwsr-xr-x囊括了rwxr--r--(0744),故拥有rwsr-xr-x权限的文件也满足要求而列出。
  • -perm /mode:查找文件权限包含mode中任一模式的文件,比如要查找rwxr-xr-x,即指定/mode为/755,则权限为-rw-------的文件也满足要求,因为它包含了-rw。

用以下6个文件为例,注意观察各个文件的权限:

[root@myEuler ~]# ls -ld dir1 ; ls -l dir1
drwxr-xr-x. 2 root root 4096  3月  8 20:34 dir1
总用量 4
-rwxr--r--. 1 root root  0  3月  8 17:48 file1
-rwxr-xr-x. 1 root root 12  3月  8 17:04 file2
-rwsr-xr-x. 1 root root  0  3月  8 20:25 file3
-rw-------. 1 root root  0  3月  8 20:25 file4
-r--------. 1 root root  0  3月  8 20:33 file5
----------. 1 root root  0  3月  8 20:34 file6

1、查找文件权限刚好为0744(rwxr--r--)的文件

[root@myEuler ~]# find dir1 -perm 0744 -ls
   405681      0 -rwxr--r--   1 root     root            0 3月  8 17:48 dir1/file1

2、查找囊括了0744(rwxr--r--)权限的文件

[root@myEuler ~]# find dir1 -perm -0744 -ls
   404804      4 drwxr-xr-x   2 root     root         4096 3月  8 20:34 dir1
   405683      0 -rwsr-xr-x   1 root     root            0 3月  8 20:25 dir1/file3
   405682      4 -rwxr-xr-x   1 root     root           12 3月  8 17:04 dir1/file2
   405681      0 -rwxr--r--   1 root     root            0 3月  8 17:48 dir1/file1

 3、查找包含0744(rwxr--r--)权限中任一权限位的文件

[root@myEuler ~]# find dir1 -perm /0744 -ls
   404804      4 drwxr-xr-x   2 root     root         4096 3月  8 20:34 dir1
   405683      0 -rwsr-xr-x   1 root     root            0 3月  8 20:25 dir1/file3
   405682      4 -rwxr-xr-x   1 root     root           12 3月  8 17:04 dir1/file2
   405681      0 -rwxr--r--   1 root     root            0 3月  8 17:48 dir1/file1
   405684      0 -rw-------   1 root     root            0 3月  8 20:25 dir1/file4
   405685      0 -r--------   1 root     root            0 3月  8 20:33 dir1/file5

五、根据文件大小查找

与文件大小有关的主要选项如下:

  • -size SIZE:查找大小刚好等于SIZE的文件,单位可以是字节(c)、KB(k)、MB(M)等。
  • -size +SIZE:查找大于SIZE的文件
  • -size -SIZE:查找小于SIZE的文件

示例如下:

1、查找刚好等于指定大小的文件

#查找大小刚好为100字节的文件
[root@myEuler ~]# find /etc -size 100c -exec ls -lh {} \;
-rw-r--r--. 1 root root 100 11月 17  2000 /etc/sgml/sgml.conf

 2、查找大于指定大小的文件

#查找大于200KB的文件
[root@myEuler ~]# find /etc -size +200k -exec ls -lh {} \;
-rw-r--r--. 1 root root 686K  7月 16  2021 /etc/services
……此处省略其它输出……

 3、查找小于指定大小的文件

#查找小于100B的文件
[root@myEuler ~]# find /etc -size -10c -exec ls -l {} \;
-rw-------. 1 root root 0  3月  7 19:13 /etc/at.allow
-rw-------. 1 root root 0  3月  7 19:07 /etc/.pwd.lock
……此处省略其它输出……

六、根据文件类型查找

与文件类型有关选项主要有:

-type TYPE:这里的TYPE包括普通文件(f)、设备文件(b、c)、目录(d)、链接文件(l)、套接字(s)和管道文件(p)。

示例如下:

#查找管道文件
[root@myEuler ~]# find /run -type s
/run/gssproxy.sock
……此处省略其它输出……

#查看目录文件
[root@myEuler ~]# find /home -type d
/home
/home/zhangsan

七、使用-and、-not和-or选项优化搜索

还可以使用-and、-not和-or选项来优化搜索。某些情况下,这些选项可以帮助我们处理很多问题,例如要找到大于某个值又小于另一个值的文件,又或者找到被多个用户拥有的文件。

示例如下:

#在/shares目录查找属主是zhangsan或者lisi的文件,其中括号()要转义写成\( \)
[root@myEuler ~]# find /shares \( -user lisi -or -user zhangsan \) -ls

#查找属主是zhangsan,且大小超过1M的文件
[root@myEuler ~]# find /shares -user zhangsan -and -size +1M -ls 

#查找属主是zhangsan,但属组不是zhangsan的文件
[root@myEuler ~]# find /shares -user zhangsan -not -group zhangsan -ls

以上选项还可以组合着使用,比如-name、-type和-size组合文章来源地址https://www.toymoban.com/news/detail-722437.html

[root@myEuler ~]# find /etc/ssh /etc/dhcp -size -2k -type f -name '*.conf' -exec ls -l {} \;
-rw-r--r--. 1 root root 831 12月 27 18:15 /etc/ssh/ssh_config.d/05-redhat.conf
-rw-r--r--. 1 root root 123 12月 27 18:14 /etc/dhcp/dhcpd.conf
-rw-r--r--. 1 root root 126 12月 27 18:14 /etc/dhcp/dhcpd6.conf

到了这里,关于find命令——根据路径和条件搜索指定文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux 搜索文件中find和grep命令的区别

    在使用linux时,经常需要进行文件查找。其中查找的命令主要有find和grep。两个命令是有区的。 (1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等。 (2)grep是根据文件的内容进行查找,会对文件的每一行按照给定

    2024年02月16日
    浏览(81)
  • Linux如何使用find命令搜索到自己想要的文件呢?

    文件搜素专栏全部文章 如何使用find命令搜索到自己想要的文件 ack 命令的基本用法详解 ag命令的使用详解 在 Linux 中查找文件名包含某个的文件,可以使用  find  命令来实现。 find  命令可以在指定目录下递归搜索文件,并根据指定的条件进行过滤。 下面是使用  fi

    2024年02月03日
    浏览(70)
  • jar 命令启动java 指定配置文件路径 jar如何启动

    一、各种启动方式 1.java -jar # 例子 java -jar test.jar 1. 2. 这是最简单的启动方式,同时弊端也是很多的。 弊端1:exit 退出终端会导致java进程中断。 弊端2:ctrl+c 退出启动展示页会导致java进程中断。 弊端3:直接关闭终端会导致java进程中断(启动时和启动完关闭都会导致java进程终

    2024年02月04日
    浏览(53)
  • uniApp h5项目通过命令行打包,并生成指定路径、文件名称

    第一步:采用hbuilder新建一个项目 第二部:通过cli新建一个项目 创建命令: 创建成功之后先运行一下项目,如果启动失败 Error: Cannot find module ‘webpack/lib/RuleSet‘ 我们将hb的项目作为基础 回到主题,将hb项目作为基础, 第一步:新建src文件夹,将以下文件放入src文件夹中  第

    2024年02月07日
    浏览(41)
  • Linux 下使用 tar 命令打包指定目录下的所有文件,不包含路径方法

    一,问题描述 例如:需要打包/data/android_data/VMRK02ejyijtyww20 文件夹到/data/testtar/目录下 一般我们使用命令如下命令 当我们解VMRK02ejyijtyww20.tar压缩包后发现,把路径也打包进去了, 即/data/android_data/VMRK02ejyijtyww20;而大多数情况,我们解压后只需要的是VMRK02ejyijtyww20文件夹 二、打包

    2024年02月16日
    浏览(57)
  • 使用bat命令搜索当前目录下与指定内容相匹配的文件的方法

    使用 bat 命令搜索当前目录下与指定内容相匹配的文件,可以使用以下方法: 在命令行中输入 bat 命令,后面跟上搜索内容和文件名模式。例如: 这样可以在当前目录下搜索所有以 .txt 为扩展名的文件,并在匹配到的行中显示搜索内容。 如果需要搜索子目录中的文件,可以使

    2024年02月07日
    浏览(44)
  • 【UE4 C++】根据指定路径生成静态网格体

    在上一篇博客中(【UE C++】蓝图调用C++函数),我们用C++创建了一个蓝图函数库,本篇文章在这个蓝图函数库基础上增加一个方法,该方法只需输入一个文件目录路径,就可在场景中生成该目录下得所有静态网格体。(如果不想写C++的话,可以用这篇文章的方法:UE4 | BP | 使

    2024年02月15日
    浏览(89)
  • ElasticSearch - 根据经纬度,简单搜索指定距离范围内的数据

    ES的地图检索方式 ES支持的地图检索方式有以下几种; geo_distance geo_bounding_box geo_polygon 1、 geo_distance :直线距离检索,如给定点A,要求返回地图上距离点A三千米的商家(点外卖场景) 2、查找索引内距离北京站(116.433733,39.908404)3000米内的点 geo_distance涉及的参数如下 location:确

    2024年02月14日
    浏览(47)
  • linux find命令搜索日志内容

    linux find命令搜索日志内容 加上-a 是为了不报查出 binary 的错 服务器会返回 包含所查字符的整行日志信息

    2024年02月07日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包