find命令使用总结

Posted chacha51

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了find命令使用总结相关的知识,希望对你有一定的参考价值。

find命令使用总结

find命令使用总结

1. 语法

find [OPTION]... [查找路径] [查找条件] [处理动作]
查找路径:指定具体目标路径;默认为当前目录;
查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件;
处理动作:对符合条件的文件做什么操作;默认输出至屏幕;

1.1 查找条件:

1.1.1 根据文件名查找:

-name "文件名称":支持使用glob(*, ?, [], [^])

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

eg: find /tmp -iname "Fun*" |xargs rm -rf

-regex "PATTERN":以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称;

1.1.2 根据属主、属组查找:

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

eg :[root@localhost tmp]# find /tmp -user "test100"

group GRPNAME: 查找属组为指定组的文件;

eg:find /tmp -group "test100"

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

eg: find /tmp/ -uid "1099"

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

eg : find /tmp/ -gid "1099"

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

eg:find /tmp -nouser

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

eg:find /tmp -nogroup

1.1.3 根据文件类型查找:

-type TYPE:

f: 普通文件

d: 目录文件

l: 符号链接文件

s:套接字文件

b: 块设备文件

c: 字符设备文件

p: 管道文件

1.1.4 根据文件大小来查找:

-size [+|-]#UNIT(-size,然后+或者-接上数字然后接上单位)

常用单位:k, M, G

#UNIT: (#-1, #](unit指单位,#指数字,例如正好是3k则是大于3-1,小于等于3)

-#UNIT:[0,#-1](如果是-3k,则表示大于等于0,小于等于2k)

+#UNIT:(#,oo) (如果是+3k ,则表示大于3k)

例如:

[root@localhost tmp]# find ./ -size 5k -exec ls -lh  \; 
-rw-r--r--. 1 root root 5.0K Feb  9 05:38 ./DIR_COLORS
-rw-r--r--. 1 root root 4.6K Feb  9 05:38 
-rw-r--r--. 1 root root 5.0K Feb  9 05:37 ./passwd
[root@localhost tmp]# find ./ -size -5k -exec ls -lh  \; 
-rw-r--r--. 1 root root 2.9K Feb  9 05:38 ./bashrc
-rw-r--r--. 1 root root 2.4K Feb  9 05:38 ./libuser.conf
[root@localhost tmp]# find ./ -size +5k -exec ls -lh  \;
-rw-r--r--. 1 root root 12K Feb  9 05:38 ./aliases.db
-rw-r--r--. 1 root root 5.6K Feb  9 05:38 ./DIR_COLORS.256color
-rw-r--r--. 1 root root 7.1K Feb  9 05:38 ./kdump.conf

1.1.1.5 根据时间戳

以“天”为单位;

-atime [+|-]#, (-time,然后+或者-接上数字)

#: [#,#+1),(#,代表数字,如果是3天,则代表大于等于3天,小于4天,3天以前,4天以内)

+#: [#+1,oo] (如果是3代表,大于等于4天,也就是4天以前)

-#: [0,#) (如果#是3,则表示小于3,3天以内)

a是指access 接入时间,当cat或者cd文件或者目录时,a会改变。

-mtime(modify改变时间),当改变文件权限时改时间不变,但是当改变文件内容时这个时间会发生改变。

-ctime(change 时间),当改变文件内容或者改变文件时间时c都会发生改变。

如果检查一个时间段文件内容的修改则通常用mtime

以“分钟”为单位:

-amin

-mmin

-cmin

例如:

[root@localhost tmp]# date
--------------------------------------------------------------------------------
Fri Feb  9 07:11:32 CST 2018
--------------------------------------------------------------------------------
[root@localhost tmp]# stat * |grep Access
--------------------------------------------------------------------------------
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
--------------------------------------------------------------------------------
Access: 2018-02-06 05:00:00.000000000 +0800
--------------------------------------------------------------------------------
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
--------------------------------------------------------------------------------
Access: 2018-02-07 05:00:00.000000000 +0800
--------------------------------------------------------------------------------
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
--------------------------------------------------------------------------------
Access: 2018-02-03 05:00:00.000000000 +0800
--------------------------------------------------------------------------------
[root@localhost tmp]# find ./ -mtime 3
--------------------------------------------------------------------------------
[root@localhost tmp]# find ./ -atime 3 
--------------------------------------------------------------------------------
./a
--------------------------------------------------------------------------------
[root@localhost tmp]# find ./ -atime -3
--------------------------------------------------------------------------------
./
--------------------------------------------------------------------------------
./b
--------------------------------------------------------------------------------
[root@localhost tmp]# find ./ -atime +3
--------------------------------------------------------------------------------
./c
--------------------------------------------------------------------------------
[root@localhost tmp]# 
--------------------------------------------------------------------------------
插入话题一:如果改变文件的时间戳,

[root@localhost tmp]# touch -a -t 201804090830.00 a  
--------------------------------------------------------------------------------
[root@localhost tmp]# stat a
--------------------------------------------------------------------------------
  File: ‘a’
--------------------------------------------------------------------------------
  Size: 6               Blocks: 8          IO Block: 4096   regular file
--------------------------------------------------------------------------------
Device: 803h/2051d      Inode: 33575688    Links: 1
--------------------------------------------------------------------------------
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
--------------------------------------------------------------------------------
Context: unconfined_u:object_r:user_tmp_t:s0
--------------------------------------------------------------------------------
Access: 2018-04-09 08:30:00.000000000 +0800
--------------------------------------------------------------------------------

1.1.1.6 根据权限查找:

-perm [/|-]MODE

MODE: 精确权限匹配

/MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可;

-MODE:每一类对象都必须同时拥有为其指定的权限标准;

1.1.7 处理动作:

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

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

-delete:删除查找到的文件;

-fls /path/to/somefile:查找到的所有文件的长格式信息保存至指定文件中;

-ok COMMAND  ; 对查找到的每个文件执行由COMMAND指定的命令;

对于每个文件执行命令之前,都会交互式要求用户确认;

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

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

注意:find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令;

有些命令不能接受过多参数,此时命令执行可能会失败;另一种方式可规避此问题:

find | xargs COMMAND

2.1 组合条件:

与:-a

或:-o

非:-not, !

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

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

找出/tmp目录下,属主不是root,且文件名不是fstab的文件;

find /tmp \( -not -user root -a -not -name "fstab" \) -ls

find /tmp -not \( -user root -o -name "fstab" \) -ls

切记,参数前面均要加横杆,-user -a -not -name -group,如果提示下列错误就要想到是不是没有加横杆
--------------------------------------------------------------------------------
[root@localhost ~]# find /tmp -not -user root -a -not group root
--------------------------------------------------------------------------------
find: paths must precede expression: group
--------------------------------------------------------------------------------
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
--------------------------------------------------------------------------------
[root@localhost ~]# find /tmp -not -user root -a -not -group root
--------------------------------------------------------------------------------
/tmp/file7
--------------------------------------------------------------------------------
/tmp/file8
--------------------------------------------------------------------------------
/tmp/file9
--------------------------------------------------------------------------------
/tmp/file10
--------------------------------------------------------------------------------
find /tmp -not -user root -a -not -group root -ls
--------------------------------------------------------------------------------
find /tmp \( -not -user root -a -not -group root \) -ls
--------------------------------------------------------------------------------
find /tmp -not \(  -user root -o -group root \) -ls   

以上是关于find命令使用总结的主要内容,如果未能解决你的问题,请参考以下文章

Mac下find命令常用语法总结

linux下find命令的使用和总结

find命令总结

find命令总结

find命令总结与实战

find命令复习与总结