搜索之locate与find

一、locate:(非实时查找)模糊搜索,搜索速度极快

  查找逻辑:查询系统上预建的文件索引数据库/var/lib/mlocate/mlocate.db。索引构建时系统空闲时自动进行创建的,周期性任务。updatedb来手动更新索引,但是会很耗资源。

    -i  忽略大小写

    -n 只搜索前n个就停止了

    -r 支持正则表达式     locate -r "\.sh$"  (注意" "号必须加)

二、find:(实时查找)精确搜索,默认为本目录,自动递归。

    ①、指定目录深度

      -maxdepth level(第一级就是本级)先浅再深

      -mindepth level (默认为1级)    先浅再深

      -depth      (先处理深目录,然后深目录中的文件,再浅目录,然后浅目录的文件)

    ②、-name (支持匹配符)精确查找:find -name hello.sh    大约查找:find -name "*.txt"(注意" "必须加)

      -iname  忽略大小写

      -inum n  按inode搜索

      -samefile name 超相同的inode(就是找硬链接)

      -links n  链接数为n的文件

      -regex  正则表达式(必须前路径)  find -regex ".*\.txt$"

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

      -group GRPNAME

      -uid  USERID

      -gid  GROUPID

      -nouser

      -nogroup

    ④、-type TYPE

      TYPE可以是:b、c、f、d、p、s、l

    ⑤、-empty (文件夹为空)

       只搜索空文件夹:find -empty -type d

    ⑥、组合条件:

      -a  与(默认两个条件间就是与的关系)

      -o  或    find \( -user wang -o -user li \)  -ls 会显现wang和li的详细信息     find -user wang -o -user li -ls 只会显示li的详细信息

      !/-not 非

    ⑦、-prune 剪切

      find /etc/ -path ‘/etc/sane.d’ -a -prune -o -name "*.conf"

      find /etc \( -path "/etc/sane.d" -o -path "/etc/fonts" \)  -a -prune -o -name "*.conf"

    ⑧、根据文件大小

      -size [+|-] k\M\G\c(字节)

      规则:6k:(5k,6k]

         +6k:(6k,+无穷)

         -6k:(0,5k]

         2048c:(2047c,2048c]=2048c

    ⑨、以天为单位

      -atime [+|-] n

      规则:10:[10,11)

         +10:[11,+无穷]

         -10:(10天以内)

      -mtime

      -ctime

      以分钟为单位

      -amin

      -mmin

      -cmin

    ⑩、以权限查找 -perm

      -perm [/|-] 权限  /:或    -:与

      022  精确的022权限

      -220 属主与属组都为w,其他用户我不管

      /220 属主与属组有一个为w,其他用户我不管

      /700 属组与其他用户我不管,属组中的权限也是或的关系,有一个就可以。   

    ⑪、多余动作处理:

      -print  (默认就已经将结果打印在屏幕了)

      -print0 与xargs -0联用,专门处理“a b”.txt这种特殊文件。(print0在每个结果后加1个空字符,xargs -0以空位分割符)

      -ls

      -fls file(将以ls显示的格式保存在file中)<==> -ls >file

      -ok 命令 {} \; (每个找出的结果都会询问)

      -exec 命令 {} \;(不会询问⑬) 不支持丰富的用法,建议使用xargs

     ⑫、xargs:功能强大,专门处理后面只跟参数的命令。将接受的内容作为后面命令的参数。

       seq 10 |xargs  (默认将换行变为空格)

       find -name "*.sh" |xargs ls -lS (按大小排序)

       echo {1..10}|xargs -n1 (一行一个)  echo {1..10} |xargs -n1 useradd

       echo {1..10}|xargs -n2 (一行两个)

       seq 10 |xargs -i echo "https:n={}"  (-i使{}指定前面的输出,会一行行处理,类似于循环10次)

          echo {1..10}|xargs -n1 -i echo "https"n={}"  (达不到我们想要的结果,不要用这种方法)

案例:一、you-get可以下载视频。需要安装python3-pip。

             然后pip3 install you-get。

     you-get 视频地址 -P n  (-P采用多线程,使下载速度更快。但是线程用的太大会使网站认为你在攻击它,就把你屏蔽了)

       二、下载文件

      ①、安装httpd,进入/var/www/html。自己建立一些文件for i in {1..30};do echo Page$i >test$i.html;done

      ②、systemctl start httpd

      ③、自己去浏览器看自己写的内容

      ④、下载:seq 30 |xargs -i wget -P /data/test http://10.0.0.105/test{}.html

posted @ 2020-04-25 23:24  ldyaly  阅读(744)  评论(0编辑  收藏  举报