linux下find命令详解与实例分析

  1. find命令的一般使用格式
  2. find命令的常用选项和实例
find命令的一般使用格式

使用man命令查看find文档的内容,可以看到find命令的功能和使用格式。
这里写图片描述
根据帮助文档先来对find命令的一般格式做一个简单介绍。

find命令功能:在一个目录(及子目录)中搜索文件.
find命令使用格式:find[-H]  [-L]  [-P]  [path...]  [expression]
其中:其中,'-H' '-L' '-P'三个选项主要是用来处理符号连接,'-H'表示只跟随命令行中指定的符号连接,'-L'表示跟随所有的符号连接,'-P'是默认的选项,表示不跟随符号连接。
path : find命令所查找的目录路径。例如 /home 在根目录下的home目录里面进行查找。
expression :可以分为[option]  [action]
option: 用来指定find命令的常用选项,比如-name,-type,-perm
action:  用来指定find命令后续可执行的一些动作,比如-print,-exec,-ok等

find命令的常用选项详解

常用选项根据使用目的可分为3部分分别是:时间相关的选项,用户或用户组名称相关的选项,文件权限以及名称相关的选项

时间相关选项

查看帮助文档可以看到如下信息
这里写图片描述
这类参数选项有 -atime,-ctime,-mtime,-amin, -cmin, -mmin等这些时间选项用法基本相似。而(-*time与-*min区别在于前者以24小时作为单位,后者以分钟作为单位)我们以-mtime为例做以介绍

-mtime作用和用法详细介绍
-mtime n: n代表数字,意思是列出在n天之前的“一天之内”被修改过的文件名。
-mtime +n: “+n”代表列出n天之前(不含第n天本身)被修改过的文件名。
-mtime -n: “-n" 代表列出在n天之内(含n天本身)被修改过的文件名
-mtime n的使用

例如命令使用 find /home -mtime 1 -exec ls -ld { } \;
这条命令的意思是在根目录下的home目录中查找一天之前的”一天内的“被更改过的文件并将找到的文件输出在终端。后面的-exec ls -ld { } \ 在后面会进行详细介绍
这里写图片描述
可以看出列出的是昨天(26号)一天内的文件信息。

-mtime +n的使用

例如使用命令 find /home/god -mtime +10 -exec ls -l { } \;
上面命令的意思是列出/目录下home目录中的god目录 符合10天以前修改过的文件名。然后把这些文件详细信息显示出来。
这里写图片描述
从文件信息可以看出,所列出的文件都是10天以前的文件。

-mtime -n的使用

例如使用命令 find ./cmd/ -mtime -3 -exec ls -l {} \;
意思是在当前目录下的cmd目录中查找3天之内(含3天本身)被更改过的文件的文件名,最后输出显示。27号三天内由26 25 24号,所以如图
这里写图片描述
可以看到.file文件是12月24创建的。
在使用命令 find ./cmd/ -mtime -2 -exec ls -l {} \;
作为对比如图
这里写图片描述
可以看出前两天内,24号的文件就找不到了(不属于两天内的范围)
-newer file1 ! file2 查找更改时间比文件file1新但比文件file2旧的文件

用户或用户组名称相关的选项

这类选项参数有-uid,-gid,-user,-group,-nouser,-nogrop等选项,下面对这些选项的使用方法和实例分析做以陈述。

-uid n:n为数字,这个数字是用户的账号ID,记录在/etc/passwd/中。可以使用id [用户名]查看
这里写图片描述
例如使用命令
sudo find /home/ -uid 501 -exec ls -l {} \;
这里写图片描述
由id命令查看 直到uid为500的用户是tom,所以执行find命令后查找出来了tom用户的相关文件。
-gid n:这个命令与-uid相似,只是查找的是与组用户相关的文件信息,所以在此不做过多的赘述。
-user name:name是用户账户名,这个选项是通过账户名来查找相关文件。
例如使用命令
sudo find /home/ -user tom -exec ls -l {} \;
这里写图片描述
可以看出通过用户tom名称找到了与tom相关的文件。
-group name:这个命令与-user name相似,只是查找的是与组用户相关的文件信息,所以在此不做过多的赘述。
-nouser: 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
-nouser和-ongroup可以很方便查找系统中不正常的文件。

文件权限以及名称相关的选项

这类参数选项主要有-name filename,-size,-perm,-prune, -depth等
下面对这些常用的选项使用方法和实例进行分析。

-name filename: filename是目标文件名。直接查找要查找的文件。
例如命令:find /home/god/cmd -name hello.i -exec ls -l {} \;
这里写图片描述
可以看到直接可以找到目标文件hello.i
-size [+-] SIZE:查找比SIZE还要大[+]或者还要小[-]的文件。SIZE规格有
c: 代表byte
k: 代表1024bytes
例如使用命令:sudo find /home/ -size +50k -exec ls -lh {} \;
意思是查找路径为/home/下大于50k的文件
这里写图片描述
可以看出文件大小均大于50k
-perm mode: 查找文件权限”刚好等于“mode的文件,举例来说-rwsr-xr-x属性是4755 s是文件特殊权限值。
-perm -mode: 查找文件权限”必须要全部包含mode权限“如-rwxr–r– 被-rwsr-xr-x包含,所以查找前者0744时后者4755也会被列出来。
-perm +mode:查找文件权限”包含任一mode的权限“如我们要查找-rwxr-xr-x,也就是-perm +755时,属性为-rw——-也会被列出来。
实例分析
例如命令:sudo find / -perm 4755 -exec ls -lh {} \;
这里写图片描述
可以看到列出了所有文件权限为4755的文件
实例2
命令:sudo find /home/god/cmd -perm -0644 -exec ls -l {} \;
这里写图片描述
实例3
命令:sudo find /home/god/cmd -perm +0744 -exec ls -l {} \;
这里写图片描述
-type TYPE:查找文件类型为TYPE的,类型主要由f(一般文件), b,c(设备文件),d(目录),l(链接文件),s(socket文件),p(FIFO文件)积累文件
如命令:sudo find /bin -type l -exec ls -l {} \;
这里写图片描述
看以看到查找的都是链接属性的文件。
实例2
命令:sudo find / -type b -exec ls -l {} \;
这里写图片描述
可以看到列出的全部是设备文件类型的文件名。
-prune: 使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。
-prune常常配合 -o选项,意思是 expr1 -o expr2 里面,假如满足了第一个。我们就忽略第二个
sudo find . -path "./tt" -prune -o -mtime -2 -print
查找修改时间在2天内的文件并打印,但是排除./tt目录
-prune, -print 是 action
-prune 是排除该条件
所以结果是:
满足 -path “./tt” 我们就 -prune 排除
或者满足 -mtime就 -print(当排除./ttt时候不满足,因为没有这个目录。所以就打印出来2天之内的所有文件)
实例如图:
这里写图片描述
-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
find / -name “CON.FILE” -depth –print 它将首先匹配所有的文件然后再进入子目录中查找

find命令的额外动作(action)

这类参数常用的有-print-exec-ok等一下对这三个额外动作做以详细说明

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

$ sudo find .. -mtime +1 -print;

意思是在当前目录的上级目录查找一天前的文件,然后将符合的文件输出到标准输出(终端)
这里写图片描述
-exec :find命令对匹配的文件执行该参数所给出的shell命令.相应命令的形式为’command’ { } ;,注意{ }和;之间的空格.
格式如:sudo find /bin -type l -exec ls -l {} \;
分析:这个格式的特殊地方在于”{}“”\;“, { }代表由find找到的内容,find命令找到的内容会被放到{}位置,而-exec一直到”\;“是关键字,代表find额外命令的开始-exec到结束(\;),这中间的就是find命令的额外命令,上述就是”ls -l {}“
(;)在bash环境下有特殊意义所以用反斜杠转义。
find ./ -size 0 -exec rm { } \; 删除文件大小为零的文件 (还可以以这样做:rm -i find ./ -size 0 或 find ./ -size 0 | xargs rm -f &)
为了用ls -l命令列出所匹配到的文件,可以把ls -l命令放在find命令的-exec选项中:find . -type f -exec ls -l { } \;(这也是我们开始在用的方式在用的)
-ok:和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。find . -name “*.c” -mtime +5 -ok rm { } ; 在当前目录中查找所有文件名以.c结尾、更改时间在5天前的文件,并删除它们,只不过在删除之前先给出提示
实例如下
命令:

1)touch empt
(2find . -size 0 -exec rm {} \;

.
这里写图片描述
看以看到大小为0的文件被删除了。
实例2
命令:

1)touch empt
(2find . -size 0 -ok rm {} \;

.
这里写图片描述
看以看出”安全“了很多,避免误删。**

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值