• 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 ./DIR_COLORS.lightbgcolor
    -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.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.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 
  • 相关阅读:
    自我介绍
    第一学期第一周学习总结
    2020-2021-1 20201332杨赛 《信息安全专业导论》第一周学习总结
    自我介绍
    2020-2021-1 20201307 《信息安全专业导论》第2周学习总结
    师生关系
    教材快速浏览
    2020-2021-1 20201307 《信息安全专业导论》第一周学习总结
    自我介绍
    20201319《信息安全导论》第一周学习总结
  • 原文地址:https://www.cnblogs.com/chacha51/p/13764858.html
Copyright © 2020-2023  润新知