码迷,mamicode.com
首页 > 其他好文 > 详细

随堂练习 find

时间:2020-06-28 09:51:16      阅读:49      评论:0      收藏:0      [点我收藏+]

标签:搜索   相同   long   开始   str   模式   块设备   管道   目录   

find 是实时查找工具,通过遍历指定路径完成文件查找。

工作特点

1)查找速度略慢

2)精确查找

3)实时查找

4)查找条件丰富

5)可能只搜索用户具备读取和执行权限的目录

格式

find [OPTTON]...[查找路径] [查找条件] [处理动作]

查找路径:指定具体目标路径;默认为当前目录。

查找条件:指定的查找标准,可以文件名,大小,类型,权限等标准进行;默认为找出指定路径下的所有文件。

处理动作:对符合条件的文件做操作,默认输出至屏幕。

1,指定搜索目录层级

-maxdepth  最大搜索目录深度,指定目录下的文件为1级。

-mindepth  最小搜索目录深度。

范例:

find /etc -maxdepth 2 -mindepth 2

2,对每个目录先处理目录内的文件,在处理目录本身

-depth  -d

范例:

find /data/test  -depth

3,根据文件名和iNode查找

-name  "文件名称":支持使用glob;如:*,?,[],[^],通配符要加双引号引起来

-iname  "文件名称":不区分字母大小写

-inum n  按iNode号查找

-samefile  name 相同iNode号的文件

-links n  链接数为 n 的文件

-regex "PATTERN":以PATTERN匹配整个文件路径,而非文件名称

范例:

find -name  test.png

find -iname test.png

find / -name  ".txt"

find /var -name  "log*"

find -regex  ".*\.txt$"

4,根据属主,属组查找

-user  USERNAME:查找属主为指定用户(UID)的文件

-group  GRPNAME:查找属组为指定组(GID)的文件

-uid  UserID:查找属主为指定的UID号的文件

-gid  GroupID:查找属组为指定的GID号的文件

-nouser:查找没有属主的文件

-nogroup:查找没有属组的文件

5,根据文件类型查找

-type 可以是以下形式:

f:普通文件

d:目录文件

l:符号链接文件

s:套接字文件

b:块设备文件

c:字符设备文件

p:管道文件

范例:

1)查找/home的目录

find /home -type d  -ls

2)空文件或目录   -empty

find /apps  -type d   -empty

3)组合条件

:-a  ;默认多个条件是与关系

:-o

:-not    !

范例:

find  /etc/  -type d  -o  -type l | wc -l

find /etc/  \(-type d  -o  -type l \)   -ls | wc -l

德·摩根定律

1)(非A)或(非B)=  非(A且B)

2)(非A)且(非B)=  非(A或B)

示例:

!A -a !B = !(A -o B)

!A -o !B = !(A -a B)

范例:

find -user long  -group long

find -user long -not  -group long

find -user long -o  -user  ling

find -not \( -user long -o -user ling \)

find  / -user long -o -uid 500

find ! \( -type d -a -empty \) | wc -l

find ! -type d -o ! -empty | wc -l

find ! -user long  !  -user lan

1)找出/tmp目录下,属主不是root,且文件名不以f 开头的文件

find /tmp -not ( -user root  -o  -name ‘f*‘ )  -ls

6,排除目录

范例:

1)查找/etc/下,除/etc/sane.d目录的其他所有.conf后缀的文件

find /etc  -path ‘/etc/sane.d‘  -a -prune -o -name  "*.conf"

2),查找/etc/下,除/etc/sane.d和/etc/fonts两个目录的所有.conf后缀的文件

find  /etc \( -path "/etc/sane.d" -o -path "/etc/fonts" \) -a -prune -o  -name "*.conf"

3),排除/proc和/sys目录

find  / \( -path "/sys"  -o -path "/proc" \) -a -prune -o -type f -a  -mmin -1

7,根据文件大小来查找

-size  [+|-] #UNIT

  常用单位:k,M,G,c(byte),注意大小写敏感

#UNIT:(#-1,#)

  如:5k 表示(4k,5k]

-#UNIT:[0,#-1]

  如:-5k 表示[0,4k]

+#UNIT:(#,∞)

  如:+5k 表示(5k,无穷大)

范例:

find /  -size +10G

8,根据时间戳

#以天为单位

-atime  [+|-]#

-mtime

-ctime

#:[#,#+1)

+#:[#+1,无穷大]

-#:[0,#)

#以分钟为单位

-amin

-mmin

-cmin

9,根据权限查找

-perm [/|-]MODE

MODE:精确权限匹配

/MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可;或关系,+ 从CentOS7开始淘汰

-MODE:每一类对象都必须同时拥有指定权限;与关系

0  表示不关注

说明

find  -perm 755  会匹配权限模式恰好是755的文件

只要当任意人有写权限时,find  -perm /222 就会匹配

只有当每个人都有写权限时,find  -perm -222 才会匹配

只有当其他人(other)有写权限时,find  -perm -002 才会匹配

10,处理动作

-print:默认的处理动作,显示至屏幕

-ls:类似于对查找到文件执行 “ls -l”命令

-fls file:查找到的所有文件的长格式信息保存至指定文件中,相当于 -ls > file

-delete:删除查找到的文件,慎用!

-ok COMMAND {} \;  对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认

-exec COMMAND {} \;  对查找到的每个文件执行由COMMAND指定的命令

{}:用于引用查找到的文件名称自身

范例:

1)备份配置文件,添加.log这个扩展名

find -name ".conf" -exec cp {}  {}.log  \;

2)提示删除存在时间超过3天以上的 long的临时文件

find /tmp -ctime +3 -user long  -ok  rm {} \;

3)在主目录中寻找可被其他用户写入的文件

find  ~  -perm -002  -exec chmod o-w  {} \;

4)查找 /data下的权限为644 ,后缀为sh 的普通文件,增加执行权限

find /data  -type f -perm 644  -name "*.sh"  -exec chmod +755 {} \;

11,参数替换 xargs

由于很多命令不支持管道| 来传递参数,xargs用于产生某个命令的参数,xargs可以读入stdin的数据,并且以空格符或回车符将stdin的数据分隔成为参数,另外许多命令不能接受过多参数,命令执行可能会失败,xargs可以解决

注意:文件名或者是其他意义的名词内含有空格符的情况

find 经常和 xargs 命令进行组合,形式如下:

find  |  xargs COMMAND

范例:

1)显示10个数字

seq 10 | xargs

2)删除当前目录下的大量文件

ls  |  xargs  rm

3)对文件排序显示

find  -name  "*.sh" | xargs ls -Sl

4)批量创建和删除用户

echo user{1..10}  | xargs -n1  useradd

echo user{1..10}  | xargs -n1  userdel -r

5)这个命令是错误的

find /sbin/ -perm  /700  |  ls -Sl

6)查找特殊权限的文件,并排序

find /bin/  -perm /7000 | xargs  ls -Sl

7)此命令和上面的有何区别

find /bin/ -perm -7000  |  xargs ls -Sl

8)以字符nul分隔

find -type f  -name  "*.txt"  -print0 | xargs -0 rm

9)并发执行多个进程

seq 100 | xargs -i -P10 wget -P  /data    http://10.0.0.100/{}.html 

随堂练习 find

标签:搜索   相同   long   开始   str   模式   块设备   管道   目录   

原文地址:https://www.cnblogs.com/xuanlv-0413/p/13200890.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!