Linux 中 find 常见用法示例

Linux 中 find 常见用法示例

前言:我们为什么要学会使用find命令

每一种操作系统都有成千上万的文件组成,对于linux这样“一切皆文件”的操作系统来说更不例外,大家应该都能很轻松使用windows下的文件查找功能,但是对linux这一功能可能并不是很熟悉,其实想玩linux的你更要牢牢掌握这个命令,因为linux不像windows那样有固定的文件名后缀,并且因为linux阵营下百家争鸣的特性,一个相同的文件在不同的发行版,可能会有不同,所以如果你能牢牢掌握find命令的使用,你在摸索linux的道路上将会顺利很多,同时你会发现linux下文件查找功能其实很简单,而且要比windows下查找功能强大很多很多!

Linux下查找文件的命令有两个 locate 和 find

locate

locate是对其生成的数据库进行遍历(生成数据库的命令:updatedb),这一特性决定了用locate查找文件速度很快,但是locate命令只能对文件进行模糊匹配,在精确度上来说差了点简单介绍下它的两个选项:

#locate
    -i   //查找文件的时候不区分大小写 比如:locate -i passwd
    -n   //只显示查找结果的前n行     比如:locate -n 5 passwd

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

find在不指定查找目录的情况下是对整个系统进行遍历查找

  • path:要查找的目录路径。
    ~ 表示$HOME目录
    . 表示当前目录
    / 表示根目录

  • -print:表示将结果输出到标准输出

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

  • ok:与exec作用相同
    区别在于,在执行命令之前,会让用户确认是否执行

  • {}:替代查找到的文件

  • option常用的有一下几个选项:

-name 按照名字查找(精确查找)

find /etc -name "pass*"           //  *  表示  通配任意的单个或者多个字符 
find /etc -name "pass?"           //  ? 表示 通配任意的单个字符
find /etc -name "[ab].sh"         //  []  表示 通配括号内的任意一个字符   a.sh 或者  b.sh
find . -name "[A-Z]*" -print      // 在当前目录下查找以大写字母开头的文件 

find . -name "test*" -fprint file //在当前目录下查找以test开头的文件,并把结果输出到file中

find -name "ap*" -o -name "may*"  //在当前目录下查找以ap或may开头的文件

find . -name "*.log" -mtime +5 -ok rm {} \; 
//在当前目录下查找更改时间为5天之前的以.log结尾的文件并删除它们,
//在删除前进行询问提示。按y键删除文件,按n键不删除

find . -name "*.log" -exec mv {} .. \;       //将查找到的文件移动到上一级目录
find . -type d | sort                        //查找当前所有目录并排序

-iname 按照文件名查找,不区分大小写

-perm 按照权限查找

find . -perm 755      //在当前目录下查找问价权限为755的文件
find . -perm -007     //在当前目录下查找所有用户都可读写执行的文件,同 -perm 777
find . -perm +222     //查找当前目录下任意一类用户(属主,属组,其他)匹配写权限的文件

-prune 不再当前指定的目录下查找

find . -path "test" -prune              //在当前目录下查找但不在test目录下查找文件

find . -name "out*" -prune -o -name "*.txt" -print  //在当前目录中查找不是out开头的txt文件

find test -path "test/test4" -prune -o -print                     
//在test目录下查找不在test/test4子目录之内的所有文件

find . \( -path test/test4 -o -path test/test3\) -prune -o -print
//避开多个文件夹,在当前目录下查找所有文件除了test/test4和test/test3下的文件

find . !-name "." -type d -prune -o -type f -name "*.txt" -print
//在当前目录,不在子目录中,查找txt文件

-user 文件属主来查找

find / -user arthur -type f -print         //根目录下查找属主是www的文件

-group 文件所属组来查找

find / -group mysql -type f -print         //根目录下查找属组mysql的文件

-nogroup 查找无有效所属组的文件,即文件的属组在/ect/groups中不存在

find / -nogroup -type f -print             //根目录下查找用户组被删除的文件

-nouser 查找无有效属主的文件,即文件的属主在/ect/passwd中不存在

find / -nouser -type f -print              //根目录下查找属主被删除的文件

-type 按照文件类型查找
b - 块设备文件
d - 目录
c - 字符设备文件
p - 管道文件
l - 符号链接文件
f - 普通文件
s - socket文件

find . -type l -print            //在目录及其子目录下查找符号链接文件

find . ! -type d -print          //在当前目录下查找除目录以外的所有类型的文件

find . -type f -exec ls -l {} \;
//匹配到当前目录下的所有普通文件,并使用ls -l命令将它们列出

find . -type f -mtime +14 -exec rm {} \;
//在目录中查找更改时间在14天之前的文件并删除它们

-mtime -n +n 按文件更改时间来查找文件,-n指n天以内,+n指n天以前(-mmin单位是分钟)

find . -mtime -2 -type f -print     //查找两天内被修改过的文件
find . -mtime +2 -type f -print     //查找两天前被修改过的文件
find -mmin -2                       //查找两分钟内被修改过的文件

-atime -n +n 按文件访问的时间来查找文件(-amin

find -atime -2                      //查找两天内被访问过的文件
find -atime +2                      //查找两天前被访问的文件

-ctime -n +n 按文件状态改变的时间来查找文件(-cmin),如文件修改,属性\属主 改变 ,节点 ,链接变化等

修改文件,-mtime 改了, -ctime 也会改.
访问文件,-atime 改了, -ctime 没变.
chown, chgrp, chmod,mv, 都会使 -ctime 改变,但不影响 -atime 和 -mtime.
touch 可以改 -mtime and/or -atime,但 touch -a 只改访问时间时,-ctime也改了.
touch -m 改修改时间时,-ctime当然也改了.

find -ctime -2                      //查找两天内状态被改变的文件
find -ctime +2                      //查找两天前状态被改变的文件

-depth 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找

find / -name "CON.FILE" -depth -print   //从文件的根目录开始,查找一个名为CON.FILE的文件
find / -name "test.txt" -maxdepth 4     //从文件的根目录开始,查找test.txt,深度最多为4层
find / -name "test.txt" -mindepth 4     //从文件的根目录开始,查找test.txt,从第4层开始往下查

使用depth的原因:当在使用find命令向磁带上备份文件系统时,希望首先备份所有的文件,其次再备份子目录中的文件。

-size n:[c]查找文件长度为n块(一块等于512字节)的文件,带有c时表示文件长度以字节记

find . -size +1000c -print          //查找当前目录大于1K的文件
find . -size +1000000c -print       //查找当前目录大于1M的文件
find . -size 100c -print            //查找当前目录下刚好为100字节的文件
find . -size -1000c -print          //查找当前目录下小于1K的文件

find . -size +10 -print             //在当前目录下查找大于10块的文件

-ftype 查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息

find . -name "test.txt" -ftype vfat   //在当前目录下查找文件系统类型为vfat名为test.txt的文件
find . -name "test.txt" ! -ftype vfat //在当前目录下查找文件系统类型不为vfat名为test.txt的文件

-newer f1 !f2 查找更改时间比f1新但比f2旧的文件

find . -newer test2.txt               //在当前目录下查找更新时间比test2.txt新的文件
find . -anewer test2.txt              //在当前目录下查找存取时间比test2.txt新的文件

-mount 在查找文件时不跨越文件系统mount点(不进入其他文件系统)

find . -name "*.XC" -mount -print     //在当前目录开始查找位于本文件系统中文件名以XC结尾的文件

-follow 如果find命令遇到符号链接文件,就跟踪至链接所指向的文件

-cpio 对匹配的文件使用cpio命令,将这些文件备份到磁带设备中
其他:

find . -used -2            //查找文件或目录在2天内被改动过的文件
find . -uid  +501          //列出当前目录内用户的识别码大于501的文件或目录
find . -gid 500            //列出当前目录内组id为500的文件或目录
find . -links +2           //查找硬链接数大于2的文件或目录
find . -empty              //查找系统中为空的文件或者文件夹
find . -name "*.c" | xargs chmod 700    //使用xargs来对查找到的文件进行进一步的操作

Linux命令参考

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值