zoukankan      html  css  js  c++  java
  • 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   
  • 相关阅读:
    【BZOJ1645】[Usaco2007 Open]City Horizon 城市地平线 离散化+线段树
    【BZOJ4196】[Noi2015]软件包管理器 树链剖分
    【BZOJ4698】Sdoi2008 Sandy的卡片 后缀数组+RMQ
    【BZOJ4278】[ONTAK2015]Tasowanie 后缀数组
    mysql中使用concat例子
    SAP basis 常用事物
    推和敲
    踏和走
    下一个该你啦
    长城:恐惧的纪念碑
  • 原文地址:https://www.cnblogs.com/chacha51/p/11235225.html
Copyright © 2011-2022 走看看