Shell 编程中的常用工具

文件查找 find 命令

语法格式

find命令总结:

常用选项:

    -name    查找/etc目录下以conf结尾的文件 find /etc -name "*.conf"
    -iname    查找当前目录下文件名为aa的文件,不区分大小写    find . -iname aa
    -user    查找文件属主为hdfs的所有文件    find . -user hdfs
    -group    查找文件属主为yarn的所有文件    find . -group yarn
    -type    查找文件属组为yarn的所有文件    find . -group yarn
        f    文件        find . -type f
        d    目录        find . -type d
        c    字符设备文件    find . -type c
        b    块设备文件    find . -type b
        l    链接文件    find . -type l
        p    管道文件    find . -type p

    -size
        -n    大小小于n的文件
        +n    大小大于n的文件
        n    大小等于n的文件(用的少)

查找/etc/目录下小于10000字节的文件

find /etc -size -10000c

查找/etc目录下大于1M的文件

find /etc/ -size +1M

-mtime

  • -n n天以内修改的文件
  • +n n天以外修改的文件
  • n 正好等于n天修改的文件

查找/etc目录下5天以内修改且以conf结尾的文件

find /etc -mtime -5 -name '*.conf'

查找/etc目录下10天之前修改且属主为root的文件

find /etc -mtime +10 -user root

  

-mmin -n

  • n分钟以内修改的文件
  • +n n分钟以外修改的文件

查找/etc目录下30分钟之前修改的文件

find /etc -mmin +30

查找/etc目录下30分钟以内修改的目录

find /etc -mmin -30 -type d

  

-mindepth n 表示从n级子目录开始搜索

在/etc下的3级子目录开始搜索

find /etc -mindepth 3 -name '*.conf'

  

-maxdepth n 表示最多搜索到n级子目录

在/etc下搜索符号条件的文件,但最多搜索到2级子目录

find /etc -type f -name '*.conf' -size +10k -maxdepth 2

  

需要了解的选项:

-nouser 查找没有属主的文件

find . -type f -nouser

-nogroup 查找没有属组的文件

find . -type f -nogroup

-perm 根据文件权限查找

find . -perm 664

-prune 通常和-path一起使用,用于将特定目录排除在搜索条件之外

查找当前目录下所有普通文件,但排除test目录

find . -path /etc -prune -o -type f

  

查找当前目录下所有普通文件,但排除etc和opt目录

find . -path /etc -prune -o -path /opt -prune -o -type f

  

查找当前目录下所有普通文件,但排除etc和opt目录,但属主为hdfs

find . -path /etc -prune -o -path /opt -prune -o -type f -a -user hdfs

  

查找当前目录下所有普通文件,但排除etc和opt目录,但属主为hdfs,切文件大小必须大于500字节

find . -path ./etc -prune -o -path ./opt -prune -o -type f -a user hdfs -a -size +500c

  

-newer file1  查找比file1 新的文件

find /etc -newer a

  

操作:

  • -print 打印输出
  • -exec 对搜索到的文件执行特定的操作,格式为 -exec 'command' {} \;
  • -ok 和exec功能一样,只是每次操作都会给用户提示

例子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 {} /root/conf/ \;

  

逻辑运算符:

  • -a 与
  • -o 或
  • -not|! 非

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

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

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

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

  

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

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

  

示例:

查找以.conf结尾的文件

find /etc -name '*.conf'

  

-name 区分大小写,iname忽略大小写

find ./ -iname 'aa'

查找文件

find ./ -type f

  

查找/etc/目录下大于1M的文件

find /etc -size +1M

查找3天内修改的文件

find /etc/ -mtime -3

查找5天内的.conf文件

find /etc -mtime -5 -name "*.conf"

查找30分钟内被修改的文件

find /etc -mmin -30

查找2级子目录查找文件

find . -mindepth 2 -type f

最深查找1级子目录的文件

find . -maxdepth 1 -type f

查找644权限的文件

find . -perm 644

排除 test1/nginx 目录后的文件

find . -path ./test1/nginx -prune -o -type f

查找排除 test_1 和 test1 以后的文件

find . -path ./test_1 -prune -o -path ./test1 -prune -o -type f

  

查找当前目录下比123 新的文件

find ./ -newer 123

将etc目录拷贝到当前目录,查找etc目录中的.conf文件并删除

cp -r /etc ./
find ./etc -name '*.conf' -exec rm -f {} \;

find ./etc -name '*.conf'

  

将etc目录下大于1m的文件拷贝到test_5目录下

find ./etc/ -size +1M

  

-ok 提示用户是否执行操作

find ./ -type f -ok rm -f {} \;

  

find、locate、whereis和which总结及适用场景分析

locate 命令 

update db 命令 

find是精确查找

find /etc -name 'my.cnf'

locate部分匹配

locate my.cnf

即时创建的文件用locate是查找不到的,因为系统有计划任务定时更新mlocate.db文件,如果不包含是查找不到文件的

touch abc.txt
touch def.txt

# 查询刚刚创建的发现查找不到
locate abc.txt
locate def.txt

# 更新数据库就可以查找到文件了
ll -h /var/lib/mlocate/mlocate.db 
updatedb
locate abc.txt
locate def.txt

  

whereis命令

所有的文件都列出来

whereis mysql

只查找二进制文件

whereis -b mysql

只查找man文档

whereis -m mysql

  

which命令

which mysql

  

  

各命令使用场景推荐

  • find 查找某一类文件,比如文件名部分一致 功能强大,速度慢
  • locate 只能查找单个文件 功能单一,速度快
  • whereis 查找程序的可执行文件、帮助文档等 不常用
  • which 只查找程序的可执行文件 常用于查找程序的绝对路径

  

猜你喜欢

转载自www.cnblogs.com/crazymagic/p/11071875.html