Shell实战之find

本文详细解析了Linux中find命令的使用方法,包括各种查找选项如-name、-user、-size等,逻辑运算符以及如何结合-exec进行文件操作。通过具体实例展示了如何精确查找文件并执行特定操作。

常用选项

  • -name 查找/etc目录下以conf结尾的文件 find /etc -name '*conf'
  • -iname 查找当前目录下文件名为aa的文件,不区分大小写 find . -iname aa
  • -user 查找文件属主为hdfs的所有文件 find . -user hdfs
  • -group 查找文件属组为yarn的所有文件 find . -group yarn
  • -type
    • 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的文件
例子1:查找/etc目录下小于10000字节的文件		
find /etc -size -10000c
例子2:查找/etc目录下大于1M的文件				
find /etc -size +1M
复制代码
  • -mtime

    • -n n天以内修改的文件
    • +n n天以外修改的文件
    • n 正好n天修改的文件
例子1:查找/etc目录下5天之内修改且以conf结尾的文件	
find /etc -mtime -5 -name '*.conf'
例子2:查找/etc目录下10天之前修改且属主为root的文件	
find /etc -mtime +10 -user root
复制代码
  • -mmin

    • -n n分钟以内修改的文件
    • +n n分钟以外修改的文件
例子1:查找/etc目录下30分钟之前修改的文件		
find /etc -mmin +30
例子2:查找/etc目录下30分钟之内修改的目录		
find /etc -mmin -30 -type d
复制代码
  • -mindepth n 表示从n级子目录开始搜索
例子:在/etc下的3级子目录开始搜索		
find /etc -mindepth 3 
复制代码
  • -maxdepth n 表示最多搜索到n级子目录
例子1:在/etc下搜索符合条件的文件,但最多搜索到2级子目录		
find /etc -maxdepth 3 -name '*.conf'
例子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一起使用,用于将特定目录排除在搜索条件之外
例子1:查找当前目录下所有普通文件,但排除test目录
find . -path ./etc -prune -o -type f
例子2:查找当前目录下所有普通文件,但排除etc和opt目录
find . -path ./etc -prune -o -path ./opt -prune -o -type f
例子3:查找当前目录下所有普通文件,但排除etc和opt目录,但属主为hdfs
find . -path ./etc -prune -o -path ./opt -prune -o -type f -a -user hdfs
例子4:查找当前目录下所有普通文件,但排除etc和opt目录,但属主为hdfs,且文件大小必须大于500字节
find . -path ./etc -prune -o -path ./opt -prune -o -type f -a -user hdfs -a -size +500c
复制代码
  • -newer file1
例子:find /etc -newer a
复制代码

操作

  • -print 打印输出

  • -exec 对搜索到的文件执行特定的操作,格式为-exec '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 {} /root/conf/ \;
		
复制代码
  • -ok 和exec功能一样,只是每次操作都会给用户提示

逻辑运算符

  • -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' \)
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值