cyrus 发表于 2018-8-21 13:18:54

linux shell中find的使用

  一、工作方式
  沿着文件层次结构向下遍历,匹配符合条件的文件,并执行相应的操作。
  二、基本用法
  (1)根据文件名或正则表达式匹配搜索
      find搜索路径 -name "文件名"  eg.
  ①在当前目录下搜索以.txt结尾的文件,默认使用‘\n’为定界符,分隔文件名(即一个结果一行)
         find . -name "*.txt"  ②在/opt目录下搜索以.pdf结尾的文件,使用-print指定‘\0’作为定界符,分隔文件名
         find /opt -name "*.pdf" -print0   ③在上级目录下搜索文件名包含pdf,并且不区分大小 , -iname
         find .. -iname "*pdf*"  ④在当前目录下搜索以.txt或则.pdf的文件, 或 -o
         find . \(-name "*.txt" -o -name "*.pdf"\)  ⑤当前目录下,以linux开头并且以.pdf结尾的文件, 且 -a
         find . \(-name "linux*"-a-name "*.pdf"\)  ⑥-name是以文件名进行匹配,而-path将文件路径作为一个整体进行匹配
  在/home目录下搜索包含sys的文件或则路径
         find /home -path "*sys*"  (2)否定参数
  使用 ! 进行参数的否定
  eg.
  ①在当前目录下搜索除了以.txt结尾的文件
         find ! -name "*.txt"  (3)基于目录深度的搜索
  -mindepth 至少开始搜索的深度
  -maxdepth 最多搜索的深度
  eg.
  ①从第二层开始搜索
         find / -mindepth 2 -name "*.pdf"  ② 最大搜索4层
         find / -maxdepth 4 -name "*.txt"  ③只搜索一层
         find / -maxdepth -name "*.chm"  (4)让find跳过特定的目录
  -prune 跳过指定目录
  eg.
  ①在/opt/eclipse目录下搜索文件以.ini结尾的文件,并且跳过目录dropins目录
         find /opt/eclipse \( -name "dropins" -prune\) -o \( -name "*.ini"\)  (5)根据文件类型
文件类型类型参数普通文件f符号文件l目录d字符设备c块设备b套接字sFIFO(管道)p      find -type 文件类型 commands  eg.         
  ①当前目录下查找文件
      find . -type f  ② 列出当前目录下的所有符号链接文件
      find . -type l  (6)根据文件时间戳
  访问时间:用户最近一次访问文件的时间
  修改时间:文件内容最后一次被修改的时间
  变化时间:文件元数据(metadata, 例如权限或所有权)最后一次改变的时间
天分  具体时间前的
  - 表示小于这个时间
  + 表示大于这个时间
访问时间atimeamin修改时间mtimemmin变化时间ctimecmin  eg.
  ①当前目录下最近7天内被访问过的文件
      find . -type f -atime -7  ②当前目录下被修改超过9天的文件
      find . -type f -mtime +9  ③当前目录下被修改超过3分钟的文件
      find . -type f -mmin +3  (7)基于文件大小
文件大小单位cbytew2 byteb块 (512byte)  k
1024 byteM1024 kG1024 M  eg.
  ①根目录下文件大小大于3K
      find / -type f -size +3k  ②根目录下文件大小小于2M
      find / -type f -size -2M  ③根目录下文件大小为2G
      find / -type -size 2G  (8)基于文件权限和所有权的匹配
  -perm 指定搜索的文件的权限
  -user 指定搜索某个用户的文件
  eg.
  ①当前目录下的具有644权限的py文件
       find . \( -type f -a -name "*.py" -a -perm 644 \)  ②当前目录下,属于用户root的文件
       find . -type f -user root  (9)结合find命令使用 -exec 选项
  使用-exec执行其他命令
  eg.
  ①将当前目录下的root用户的文件改为my用户的
      find . -type f -user root -exec chown my {} \;  {}是一个特殊字符串,和-exec一起使用时,{}将用每一find的结果进行替换
   ②将当前目录下所有的txt文件合并到一个文件中
      find . -type f -exec cat {} \; > all.txt  这里使用的是> 而没有使用>>,因为find命令的全部输出只是一个单一流,只有多个数据流被追加到同一个文件时才使用>>.
  
  (10)删除匹配的文件
  -delete可以删除find找到的文件
  eg.
  ①删除当前目录下的.swap文件
      find . -type f -name "*.swap"-delete

页: [1]
查看完整版本: linux shell中find的使用