• find命令


    语法

    find [路径] [类型] [动作]

    -name

    *.conf   结尾
    .conf*   开头
    *conf*   包含
    .conf    精确查找
    
    [root@oldboy ~]# find   查找当前目录下的所有目录或文件,不加目录默认显示当前目录
    .     #
    ./.viminfo
    ./.certs
    ./.certs/qq.crt
    
    [root@localhost ~]# find /etc/ -name '*.sh'
    /etc/profile.d/colorgrep.sh
    /etc/profile.d/colorls.sh
    /etc/profile.d/which2.sh
    /etc/profile.d/less.sh
    /etc/profile.d/256term.sh
    /etc/profile.d/lang.sh
    /etc/profile.d/vim.sh
    /etc/dhcp/dhclient-exit-hooks.d/azure-cloud.sh
    /etc/kernel/postinst.d/51-dracut-rescue-postinst.sh
    [root@localhost ~]# find ./ ! -name 'file9'  -a -name 'file*'|xargs rm -f
    [root@oldboy ~]# yum list | grep ro*  过滤 r ro roo rop 的行,打印出来,单独一个o的行不过滤出来,不以ro开头的也会过滤出来
    find /etc/ ! -type d   查找/etc 目录下的文件(普通文件,链接文件,隐藏文件) (不等于-type f)  
    //创建文件
    touch /etc/sysconfig/network-scripts/{ifcfg-eth1,IFCFG-ETH1}
    //查找/etc目录下包含ifcfg-eth0名称的文件
    [root@zls ~]# find /etc -name "ifcfg-eth1" (必须加个单引号或者双引号)
    //-i 忽略大小写
    [root@zls ~]# find /etc -iname "ifcfg-eth1"   是
    //查找/etc目录下包含ifcfg-eth名称所有文件
    [root@zls ~]# find /etc/ -name "ifcfg-eth*"
    [root@zls ~]# find /etc -iname "ifcfg-eth*"   开头
    //查找包含eth的文件
    [root@localhost opt]# find /opt/ -name '*eth*'   包含
    [root@localhost opt]# find /opt/ -iname '*eth*'
    find /root/dir1 ! (-name 'file5' -o -name 'file9' )
    

    -size

    -size n[cwbkMG]
                  `b'    block
    
                  `c'    bytes 字节
    
                  `w'    words 单词
    
                  `k'    kb(小)  (默认)
    
                  `M'    MB(大M)
    
                  `G'    GB (大)
                  
                  -o       或者
                  -a       并且
                  ! -size  排除     
    

    -type

    f:文件
    d:目录
    l:软连接
    s:socket
    p:管道文件
    b:块设备
    c:字符设备
    
    find / -type f
    find / -type d
    find / -type b
    
    find / -type f -ls
    
    find / -type f|head -5|xargs ls -l
    [root@oldboy opt]# find /opt/ -type d |xargs rm -rf  删除了本目录
    [root@oldboy opt]# ll
    total 0
    [root@oldboy opt]# cd /opt
    -bash: cd: /opt: No such file or directory
    

    -mtime

    -mtime
    1.时间列出来,从昨天数,要第几天的就数到第几天(-atime 7)
    2.今天a - 几天b以前    (-atime 7)(时间分割段)
    那么可以知道,在linux中是文件是没有*创建时间*的,只是如果刚刚创建一个文件,毋庸置疑它的三个时间是都等于创建时间的,就像刚才创建的test文件,我们看到它的三个时间是相等的。那么在linux上这三个时间分别代表着什么,随着什么而改变:
    
    >修改时间:文件的内容被最后一次*修改的时间*,我们经常用的 ls -l命令显示出来的文件时间就是这个时间,当用vim对文件进行编辑之后保存,它的mtime就会相应的改变;
    
    >访问时间:对文件进行一次读操作,它的访问时间就会改变。例如像:cat、more等操作,但是像之前的state还有ls命令对atime是不会有影响的;
    
    >状态时间:当文件的状态被改变的时候,状态时间就会随之改变,例如当使用chmod、chown等改变文件属性的操作是会改变文件的ctime的
    
    [root@oldboy ~]# stat 7   可以查看一个文件或者目录的详细信息
      File: ‘7’
      Size: 6         	Blocks: 8          IO Block: 4096   regular file
    Device: 803h/2051d	Inode: 33575759    Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2020-04-30 03:16:00.556560787 +0800
    Modify: 2020-04-30 03:15:55.853560562 +0800
    Change: 2020-04-30 03:15:55.853560562 +0800
     Birth: -
    
    

    条件语句

    -a:and 和,并且
    -o:or 或者
    !:取反 (同类型的用括号括起来)
    
    find / -type f -name ' [1-2].txt ' -o   (-type d -name '*a*'  )
    find /  ( -type f -name ' 1.txt ' -o -name  '2.txt'  ) -o   (-type d -name '*a*'  )   转义括号,注意空格
    find / -type f -name 1.txt -o -name 2.txt -o ( -type d -name '*a*' )
    find / ( -name '1.txt' -o -name '2.txt' -o -type d -name '*a*' )
    
    !:取反  相同类型取反可以合并( -a -o)     find /etc  ! -name *.sh -o ! -name s*
    find /etc ! ( -name *.sh -a -name s* )   find /etc  -name *.sh -o -name s*
    find /etc ! ( -name *.sh -o -name s* )   find /etc  -name *.sh -a -name s*
                                            find /etc  ! -name *.sh -a ! -name s*
    ( -name 必须加个单引号或者双引号)(转义括号)
    

    find-根据用户查找文件

    忽略/proc 进程文件,进程号随时可能会变化
    find: ‘/proc/23447/task/23447/fd/6’: No such file or directory(自己进程用过的文件。不用管)

    -user:查找属主是X个用户
    -group:查找属组是X个组
    -nouser:查找没有用户的文件 删除用户
    -nogroup:查找没有组 的文件 删除组
    
    [root@localhost opt]# find ./ -user zls|xargs ls -l  查看文件
    -rw-r--r--. 1 zls qiandao 0 Apr 16 00:36 ./file1
    -rw-r--r--. 1 zls zls     0 Apr 16 00:36 ./file3
    [root@oldboy opt]# find /etc/ -nogroup |xargs ls -ld  查看目录或文件
    drwxr-xr-x 2 54644 54644 6 Apr 30 00:12 /etc/ooo
    
    

    find-根据深度查找

    -maxdepth 数字
    
    [root@oldboy ~]# find /etc/ -maxdepth 1 -type f -name '*.conf*'
    [root@oldboy ~]# find /etc/ -type f -name '*.conf*' -maxdepth 1  除了警告,结果一样
    
    [root@oldboy opt]# find /opt/ -maxdepth 1 | xargs ls -l
    

    find-根据文件权限查找

    ## 精确查找
    [root@localhost opt]# find /opt/ -perm 644
    
    ## 包含指定权限的文件
    root@localhost opt]# find /opt/ -perm -222   -2--2--2-
    
    root@localhost opt]# find /opt/ -perm /222   有一个就会找出来
    
    root@localhost opt]# find /opt/ -perm /4000  确定某一位
    
    root@localhost opt]# find /opt/ -perm /200   确定某一位
    
    [root@oldboy ~]# find / -perm /4 -ls  3位都得有4 才会被找出来= -444
    
    -222:and
    /222:or
     4   不存在
    -4 = -444
    /4 = -444
    
      [root@oldboy opt]# find /opt/ -perm /000 | wc -l   文件或目录总数量
    find: warning: you have specified a mode pattern /000 (which is equivalent to /000). The meaning of -perm /000 has now been changed to be consistent with -perm -000; that is, while it used to match no files, it now matches all files.
    56  (-1)(排除opt目录)
    
    [root@oldboy opt]# find /opt/ -perm /400 -ls  必须有一个r
    [root@oldboy opt]# find /opt/ -perm /200 -ls  必须有一个w
    [root@oldboy opt]# find /opt/ -perm /100 -ls  必须有一个x
    

    动作

    -delete (只能删除空目录,也就是目录下没用目录或文件)  rm
    [root@localhost opt]# find /opt/ -type d ! -name 'opt'|xargs rm -fr
    [root@oldboy opt]# find /opt/ -type f -delete (全部)
    
    [root@oldboy opt]# rm -rf 'date +%F-%R_444_888_file.txt'  删除名字中有空格的文件,必须要用引号,不然会以为删除两个文件
    drwxr-xr-x 2 root root 6 Apr 30 00:35 date +%F-%R_444_888_file.txt
    [root@oldboy opt]# ll -d /opt/      root无视属主权限位
    drwxr-xr-x. 2 root root 33 Apr 30 03:14 /opt/
    [root@oldboy opt]# find /opt/ -type d   查找目录会显示当前目录
    /opt/
    [root@oldboy opt]# find /opt/ -type d |xargs rm -rf 在目录下删除该目录
    [root@oldboy opt]# ll  (opt也没了)
    total 0
    
    -ls 
    [root@oldboy ~]# find /opt/ -perm 644 -ls  前面是inode ,多条件可能会显示一部分
    16777289    0 -rw-r--r--   1 root     root            0 Apr  1 00:00 /opt/2020-04-01_file.txt
    [root@oldboy ~]# find /opt/ -perm 644 |xargs ls
    /opt/2020-04-01_file.txt  /opt/2020-04-09_file.txt  /opt/2020-04-17_file.txt  /opt/2020-04-25_file.txt
    [root@oldboy ~]# find /opt/ -perm 644 |xargs ls -l
    -rw-r--r-- 1 root root 0 Apr  1 00:00 /opt/2020-04-01_file.txt
    [root@oldboy opt]# toucfind /opt/ -perm 644 |xargs ls -li  (显示所有文件的inode)
    16777289 -rw-r--r-- 1 root root 0 Apr 30 03:14 /opt/2020-04-01_file.txt
    
    [root@oldboy opt]# find . -mtime +10 |xargs chmod 755  批量授权文件
    [root@oldboy opt]# find . -mtime -10 |xargs chmod 222
    
    -ok
    语法: -ok ;     多次询问是否复制,或者移动
    -exec
    语法: -exec ;
    
    ## 拷贝找到的文件到/tmp下  批量拷贝(cp -rpat )(cp 文件如下)
    拷贝目录不能用第一种方法
    [root@localhost opt]# find /opt/ -mtime +5 |xargs cp -t /tmp/
    
    [root@localhost opt]# find /opt/ -mtime +5 |xargs -I {} cp {} /tmp/ (i不=I)
    [root@localhost opt]# find /opt/ -mtime +5 |xargs -i  cp {} /opt/syy3.txt
    
    [root@localhost opt]# find /opt/ -name '*.txt' -ok  cp {} /tmp/ ;
    [root@localhost opt]# find /opt/ -mtime +5 -exec cp {} /tmp/ ;
    
    [root@localhost opt]# find /opt/ -mtime +5 |xargs mv -t /tmp/
    
    < cp ... /opt/2020-04-01_file.txt > ? y   (-ok 询问多次是否cp)
    < cp ... /opt/2020-04-02_file.txt > ? y
    < cp ... /opt/2020-04-03_file.txt > ? y
    < cp ... /opt/2020-04-04_file.txt > ? y
    < cp ... /opt/2020-04-05_file.txt > ? y
    < cp ... /opt/zls.txt > ? y
    
    ## find 结合xargs  批量操作
    #拷贝
    find  / -type f |xargs cp -t /tmp
    #查看详细信息
    find  / -type f |xargs ls -l
    #替换
    find  / -type f |xargs sed -i 's###g'   
    sed 's###g'     不是真正的替换(显示替换的结果)
    sed -i 's###g'  这才是真正的替换(显示替换的结果)
    xargs 把文件名转化成数据流,不转化的话只替换文件名,转化的话只替换文件内容
    
    #移动
    find  / -type f |xargs mv -t /tmp
    #删除
    find  / -type f |xargs rm -fr
    

    相关命令

    rename:
    -n 先不改名,显示执行后的结果
    -f 强制执行,名重复就覆盖
    ? 任意字符
    * 表示一个或一串任意字符
    【常用正则表达式符号说明】
    ^    匹配输入的开始位置
    $    匹配输入的结尾
    .    匹配除换行符外的任意字符
    +    匹配前一个字符一次或多次 例如,"zo+"可以匹配"zoo",但不匹配"z"
    [a-z]    表示某个范围内的字符,例如,"[a-z]"匹配"a"与"z"之间的任何一个小写字母字符。
    [^m-z]    否定的字符区间。与不在指定区间内的字符匹配。
    
    [root@localhost www]# rename 's/.sh/.php/' *   (分隔符 / #)(s)     
    #将当前目录下.sh后缀的文件,变成.php
    
    [root@localhost www]# rename 's/$/.bak/' /home/www/*.php     
    #给www目录下的.php加上bak后缀
    
    [root@localhost www]# rename 's/^/bak_/' *.bin     
    #给当前目录下的.bin后缀文件加上bak_前缀
    
    [root@localhost www]# rename 's/.bin$//' *       
    #批量删除当前目录下所有文件的.bin 后缀
    
    [root@localhost www]# rename 's/A-Z/a-z/' *      
    #修改当前目录所有文件名为小写
    
    tr 现在的  以后的  (不是真正的替换)(一对一替换)(echo xx|tr 1 2 )(只能替换眼前的)
    sed 's#现在的#以后的#g' (先查找,再替换)
    
  • 相关阅读:
    JEECG SSO kisso
    高级进程间通信之基于STREAMS的管道
    网络IPC:套接字之非阻塞和异步I/O
    网络IPC:套接字之带外数据
    网络IPC:套接字之套接字选项
    网络IPC:套接字之数据传输
    网络IPC:套接字之建立连接
    网络IPC:套接字之寻址
    网络IPC:套接字之套接字描述符
    网络IPC:套接字
  • 原文地址:https://www.cnblogs.com/syy1757528181/p/12813527.html
Copyright © 2020-2023  润新知