Linux命令-find

find命令

Linux find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
Linux下find命令在目录结构中搜索文件,并执行指定的操作。Linux下find命令提供了相当多的查找条件,功能很强大。
即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限。 在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间

语法

find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;

选项

  • -name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
  • -user username 按文件属主来查找
  • -perm 按执行权限来查找
  • -group groupname 按组来查找
  • -mtime -n +n 按文件更改时间来查找文件,-n指n天以内,+n指n天以前
  • -atime -n +n 按文件访问时间来查
  • -ctime -n +n 按文件创建时间来查找文件,-n指n天以内,+n指n天以前
  • -nogroup 查无有效属组的文件,即文件的属组在/etc/groups中不存在
  • -nouser 查无有效属主的文件,即文件的属主在/etc/passwd中不存
  • -type b/d/c/p/l/f 查是块设备、目录、字符设备、管道、符号链接、普通文件
  • -depth 先查找子目录,再查找父目录
  • -maxdepth n 规定查找的最大目录深度,当前目录的深度就是1
  • -path 后面跟路径,指定文件或文件夹的路径
  • 比如"./dir/*"表示当前目录下的dir目录下的所有文件
  • 但是"./dir"仅仅表示dir这一个目录
  • 一般用来排除文件夹,!-path

在find中使用通配符时,要用双引号,如"name *"

  • 查找文件,并直接删除
$ find . -name runme -exec rm {} \;
$ find . -name runme -execdir rm {} \;
  • 查找文件,删除前询问是否删除
$ find . -name runme -ok rm {} \;
$ find . -name runme -okdir rm {} \;

实例

  • 查找当前目录及子目录下所有扩展名为log的文件
[root@hzj home]# find . -iname "*.log" 
./3.log
./1.log
./dir/2.log
./11.log
./6.log
./4.log
./2.log
./visit.log
./b.log
./a.log
  • 查找当前目录及子目录下所有的一般文件
[root@hzj home]# find .  -type f
./3.log
./1.log
./dir/2.log
./11.log
./6.log
./4.log
./2.log
./visit.log
./b.log
./a.log
  • 查找当前目录及子目录下所有的目录
[root@hzj home]# find .  -type  d
.
./dir
./dir/dir

  • 查找当前目录及子目录下所有20内创建过的文件
[root@hzj home]# find . -type f -ctime -20
./3.log
./1.log
./dir/2.log
./11.log
./6.log
./4.log
./2.log
./visit.log
./b.log
./a.log
  • 查找当前目录及子目录20天前更新过的文件,每页5条
[root@hzj home]# find /var/log -type f -mtime +20 | more -5
/var/log/boot.log-20190821
/var/log/tallylog
/var/log/yum.log
/var/log/ecs_network_optimization.log
/var/log/grubby
--More--
  • 遍历当前目录下所有文件(夹),如果文件(夹)的名字是以.log结尾的,就打印文件(夹)的名字。
[root@hzj home]# find -name '*.log' -print
./3.log
./1.log
./dir/2.log
./11.log
./6.log
./4.log
./2.log
./visit.log
./b.log
./a.log
  • 遍历当前目录下所有文件(夹),如果文件(夹)的名字不是以.log结尾的,就打印文件(夹)的名字。
[root@hzj home]# find -name '*.log' -o -print
.
./dir
./dir/dir
./test
./test/.bash_profile
./test/.bash_logout
./test/.bashrc
  • 列出除了dir目录下的所有文件
find -path "./dir/*" -o -print
或  
find ! -path "./dir/*" -print
  • 排除多条路径
find ! -path "./dir1/*" ! -path "./dir2/*" -print
  • 查找目录并列出目录下的文件(将找到的目录添加到ls命令后一次执行,参数过长时会分多次执行)
find ./ -type d -exec ls {} +
  • 打印test文件名后,打印test文件的内容
find ./ -name test -print -exec cat {} \;
  • 不打印test文件名,只打印test文件的内容
find ./ -name test -exec cat {} \;
  • 查找文件更新日时在距现在时刻二天以内的文件
find ./ -mtime -2
  • 查找文件更新日时在距现在时刻二天以上的文件
find ./ -mtime +2
  • 查找文件更新日时在距现在时刻一天以上二天以内的文件
find ./ -mtime 2
  • 查找文件更新日时在距现在时刻二分以内的文件
find ./ -mmin -2
  • 查找文件更新日时在距现在时刻二分以上的文件
find ./ -mmin +2
  • 查找文件更新日时在距现在时刻一分以上二分以内的文件
find ./ -mmin 2
  • 查找文件更新时间比文件abc的内容更新时间新的文件
find ./ -newer abc
  • 查找文件访问时间比文件abc的内容更新时间新的文件
find ./ -anewer abc
  • 查找空文件或空目录
find ./ -empty
  • 查找空文件并删除
find ./ -empty -type f -print -delete
  • 查找权限为644的文件或目录(需完全符合)
find ./ -perm 664
  • 查找用户/组权限为读写,其他用户权限为读(其他权限不限)的文件或目录
find ./ -perm -664
  • 查找所有者权限有读权限的目录或文件
find ./ -perm -u=r
  • 查找用户组权限有读权限的目录或文件
find ./ -perm -g=r
  • 查找其它用户权限有读权限的目录或文件
find ./ -perm -o=r
  • 查找所有者为lzj的文件或目录
find ./ -user lzj
  • 查找组名为gname的文件或目录
find ./ -group gname
  • 查找文件的用户ID不存在的文件
find ./ -nouser
  • 查找文件的组ID不存在的文件
find ./ -nogroup
  • 查找有执行权限但没有可读权限的文件
find ./ -executable \! -readable
  • 查找文件size小于10个字节的文件或目录
find ./ -size -10c
  • 查找文件size等于10个字节的文件或目录
find ./ -size 10c
  • 查找文件size大于10个字节的文件或目录
find ./ -size +10c
  • 查找文件size小于10k的文件或目录
find ./ -size -10k
  • 查找文件size小于10M的文件或目录
find ./ -size -10M
  • 查找文件size小于10G的文件或目录
find ./ -size -10G

使用正则表达式
-regex 'regex':用正则表达式来匹配。正则表达式匹配的是文件的相对路径,而不是文件名。
-iregex是忽略大小写的正则表达式
find -type f -regex'.*\.mk$':查找当前目录及所有深度的子目录中的mk文件。
xargs -d:设置分隔符,默认空格和换行都是分隔符。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值