zoukankan      html  css  js  c++  java
  • find指令的使用

    find的使用总结

    find path路径 option选项  [-delete] [-print] [-exec | -ok  shell命令] {} \;   需要注意的是 {} 和\; 2者分别为一个整体,2者中间使用空格分离

    -exec是执行的意思,{}是find的搜寻结果,\;是转义分号,不让shell去解释,因为这个分号是给-exec用的.

    find ./ -type f -name "*.log" -delete

    1)path路径 比较好理解,可以使用相对路径,绝对路径,以及特殊路径比如 ~  /  .    等等

    如果使用时,不指定路径,那么将使用当前路径

    2)option选项

    2.1)这部分是关键,find核心部分

    ====================================================
    -name filename #查找名为filename的文件
    -perm #按执行权限来查找
    -user username #按文件属主来查找
    -group groupname #按组来查找
    -mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
    -atime -n +n #按文件访问时间来查GIN: 0px">
    -ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
    -nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
    -nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
    -newer f1 !f2 #查更改时间比f1新但比f2旧的文件

    -type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
    -size n[c] #查长度为n块[或n字节]的文件
    -depth #使查找在进入子目录前先行查找完本目录
    -fstype #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
    -mount #查文件时不跨越文件系统mount点
    -follow #如果遇到符号链接文件,就跟踪链接所指的文件
    -cpio #对匹配的文件使用cpio命令,将他们备份到磁带设备中
    -prune #忽略某个目录

    需要注意cpio、 depth与prune 、-perm参数的使用
    =====================================================

    2.2)举例

    find / -name filename |xargs rm -rf
    之所以find . -name filename |rm -rf不通过,是因为rm命令不接受从标准输入传过来的指令


    find示例
    备份配置文件,添加.orig这个扩展名
    find -name “*.conf” -exec cp {} {}.orig \;
    提示删除存在时间超过3天以上的joe的临时文件
    find /tmp -ctime +3 -user joe -ok rm {} \;
    在主目录中寻找可被其它用户写入的文件
    find ~ -perm -002 -exec chmod o-w {} \;
    查找/data下的权限为644,后缀为sh的普通文件,增加执行权限
    find /data –type f -perm 644 -name “*.sh” –exec chmod 755 {} \;
    查看/home的目录
    find /home -type d -ls  这里可以跟-ls 命令列出

    注意这里的option 默认是-a 即 逻辑and 的关系,但可以添加-o 来设定option选项之间为 逻辑或 的关系

    find / -type f -size +20k -size -100k
    size默认在20k到100k之间

    find / -type f -size -20k -o -size +100k
    注意这里的-o不可或缺,否者查找条件或存在逻辑缺陷

    find / -type f \( -name ".sh" -o -name ".txt" \)
    find / -type f -name ".sh" -o -name ".txt"
    以上2者输出不一样,如下:

    find查找多目录
    待填坑

    find  depth  maxdepth mindepth选项

    find   /home    -name tmp.txt    -maxdepth   4   列出/home内的tmp.txt 查时深度最多为3层
    find   /home   -name tmp.txt   -mindepth   3   从第2层开始查

    在使用find命令时,可能希望先匹配所有的文件,再在子目录中查找。使用depth选项就可以使find命令这样做。这样做的一个原因就是,当在使用find命令向磁带上备份文件系统时,希望首先备份所有的文件,其次再备份子目录中的文件。 

    结合xargs来使用

    xargs后面默认隐藏了echo,后面不加命令的话会把前面传递进来的值显示一遍。但是它会把前面输入的值里面的回车默认给换成空格
    因为 useradd 不支持一次创建多个用户,并且也不支持用户名之间有空格,所以直接传递会报错,必须用xargs -n 1命令让它每行只显示一个参数,然后就换行。
    这样配合这个命令便可创建多用户了。
    例子:
    [root@centos7 /run/media/root/CentOS 7 x86_64/Packages]# seq 5
    1
    2
    3
    4
    5

    [root@centos7 /run/media/root/CentOS 7 x86_64/Packages]# seq 5|xargs
    1 2 3 4 5

    echo newuser{1..5} |xargs -n 1 useradd

    xargs它本身也是有一个默认换行的长度。因为用touch或者rm命令等,他们本身支持多个参数,所以可以不指定xargs后每一行有多少个参数,但useradd这种一次只能一个的,必须定义一行一个。
    用echo {1..100000} |xargs |wc -l 可知分成5行
    用echo {1..100000} |xargs >f1.t ,查看f1 ,得知一行有23695个参数,这也是默认换行的每一行最多的参数,touch 等可以支持这么多的参数。

    find查询结果 拷贝到目录
    find . -iname "*.doc" -type f -exec cp {} /tmp/doc \;
    find ./ -name "*.c" -exec cp '{}' ./dog/ \;
    find ./ -name "*.c" | xargs -i cp {} ./dog/

    find删除
    find / -name filename |xargs rm -rf
    find / -name filename |xargs rm -rf {}
    以上2者加上或者不加上{}的效果一致

    find结合tar打包,有以下几种方法:
    ①、将按照自己条件搜索出来的文件名写入到一个文件 tmp.list 中
    find /tmp -cmin +24 > tmp.list
    然后将文件中记录到的所有文件加入到压缩包中
    tar -T tmp.list -czvf tmp.expire.tar.gz
    ②、
    find . -name "*.txt*" -name "*test*" -type f | xargs tar -cvf test.tar.gz //找到当前目录文件名包含".txt"和"test"的文件,并打包成test.tar.gz

    find查找目录下 如何排除底下的子目录查找
    查找/etc/下,除/etc/sane.d目录的其它所有.conf后缀的文件
    find /etc -path '/etc/sane.d' -a –prune -o -name “.conf”
    查找/etc/下,除/etc/sane.d和/etc/fonts两个目录的所有.conf后缀的文件
    find /etc \( -path "/etc/sane.d" -o -path "/etc/fonts" \) -a -prune -o -
    name ".conf"
    解释如下:如果用-path选项,那么其后面的文件夹名称是针对find后面写的路径的相对路径来找的,只有前面也是绝对路径,-path后面再用绝对路径才有效

    3)-print,只用来将 标准输出 显示出来,如下:

     实际上find 指令不加上-print以及后续的-exec或-ok时,默认会加上-print

    4)-exec 参数 或者-ok 参数

    2者区别在于 -exec 不询问用户,-ok会询问

    参考:https://www.bbsmax.com/A/1O5E3648z7/   Find 查找命令时过滤掉某些文件或目录 以及 -maxdepth、-mindepth的用法

  • 相关阅读:
    Json对象与Json字符串互转(4种转换方式)
    Web.config配置文件详解
    jQuery BlockUI Plugin Demo 6(Options)
    jQuery BlockUI Plugin Demo 5(Simple Modal Dialog Example)
    jQuery BlockUI Plugin Demo 4(Element Blocking Examples)
    jQuery BlockUI Plugin Demo 3(Page Blocking Examples)
    jQuery BlockUI Plugin Demo 2
    <configSections> 位置引起的错误
    关于jQuery的cookies插件2.2.0版设置过期时间的说明
    jQuery插件—获取URL参数
  • 原文地址:https://www.cnblogs.com/weihua2020/p/13720133.html
Copyright © 2011-2022 走看看