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