日常工作中常用到脚本,像数据备份、数据压缩等等这样一些脚本。

        find命令的优点:条件比较多应用场景广范,缺点:效率比较低,速度比较慢。

1、文件查找之find命令

  (1) 语法格式:

      find [路径] [选项] [操作]

     1). 路径:可以写相对路径,也可以写绝对路径。

     2). 选项参数对照表:

        [1] -name :根据文件名查找

        [2] -perm :根据文件权限查找,如权限777,通常是一个数字

        [3] -prune :该选项可以排除某些查找目录

        [4] -user :根据文件属主查找

        [5] -group :根据文件属组查找

        [6] -mtime -n | +n :根据文件更改时间查找,n是以天为单位计算的

        [7] -mmin -n | +n :根据文件更改时间查找,n是以分钟为单位计算的

        [8] -nogroup:查找无有效属组的文件,比如添加某一个用户,在这个用户产出很多文件,有一天你这个用户名被删除掉了,剩下的文件就是没有有效属组文件。

        [9] -nouser:查找无有效属主的文件

       [10] -newer file1 ! file2:查找更改时间比file1新但比file2旧IDE文件,正确shell使用格式:find . -newer file1 \! \( -newer file2 \),点,空格,转义,缺一不可,否则都会报错。

       [11] -type:按文件类型查找

       [12] -size -n +n:按文件大小查找

       [13] -mindepth n:从n级子目录开始搜索

       [14] -maxdepth n:最多搜索到n级子目录

  3). 操作:

        [1] -print: 打印输出

        [2] -exec: 对搜索到文件执行特定的操作,格式为:【-exec 'command' {} \;】,command表示要执行的命令,{}一对大括号表示匹配前面搜索到结果,“\;”反斜杠分号固定写法。      

例子1: 搜索/etc下的文件(非目录),文件名以conf结尾,且大于10k,然后将其删除

    find ./etc/ -type f -name '*.conf' -size +10k -exec rm -f {} \;

例子2: 将/var/log/目录下以log结尾的文件,且更改时间在7天以上的删除

   find /var/log/ -name '*.log' -mtime +7 -exec rm -rf {} \;

例子3: 搜索条件和例子1一样,只是不删除,而是将其复制到/root/conf/目录下

   find ./etc -size +10k -type f -name '*.conf' -exec cp {} ./test_5/ \;

    [3] -ok: 和exec功能一样,只是每次操作都会给用户提示。

4).逻辑运算符:

        -a 与

        -o 或

        -not | ! 非       

例子1:查找当前目录下,属主不是hdfs的所有文件

      find . -not -user hdfs | find . ! -user hdfs

例子2:查找当前目录下,属主属于hdfs,且大小大于300字节的文件

      find . -type f -a -user hdfs -a -size +300c

例子3:查找当前目录下的属主为hdfs 或者以 xml 结尾的普通文件

      find . -type f -a \( -user hdfs -o -name '*.xml' \)