• linux 命令 — find


    find

    基本形式

    find base_path
    base_path可以是任何目录,find会从该目录开始往下寻找
    find . -print
    列出当前目录下所有的文件和目录,以' '作为分隔符
    find . -print0
    列出当前目录下所有的文件和目录,以''作为分隔符

    根据文件名和正则表达式匹配搜索

    搜索文件名

    find /home -name "*.txt" -print
    打印/home目录下的txt文件,-name匹配文件名

    find /home -iname "example*" -print
    打印/home目录下的文件名包含example的文件,其中example不区分大小写,-iname不区分大小写匹配文件名

    find /home ( -name "*txt" -o -name "*pdf" ) -print
    打印home目录下txt或者pdf文件(注意上面"(" 和 "-name"之间有一个空格,")"与前面一个字符也一样),-o表示匹配多个条件中的一个,OR的关系

    搜索文件路径

    find /home -path "*java*" -print
    打印home目录下文件路径中包含java的文件,-path使用通配符匹配文件或者路径

    find /home -regex ".*(.py|.sh)$"
    上面正则表达式的含义:"."任意字符,星号匹配前面表达式任意多次,后面"()"使用 ""转义,表示括弧内是一个整体,"$"表示以括弧内的内容为结束
    -regex和-path都是匹配文件或者路径,但是path是使用通配符,regex使用正则表达式,regex 与 iregex类似 name 与 iname,表示不区分大小写

    否定参数

    find 使用 ! 表示否定含义

    find /home ! -name "*.txt" -print
    打印home下所有不是txt的文件

    基于目录深度的搜索

    find可以遍历指定目录的所有子目录,使用-maxdepth,-mindepth 指定遍历目录的深度

    find /home -maxdepth 2 -name "*.txt" -print
    打印home下目录深度小于等于2的文件,-maxdepth表示文件目录深度距离当前目录最大为2

    注意指定目录深度的参数尽量放在前面,可以提高find的效率

    根据文件类型搜索

    find . -type d -print
    打印当前目录下的目录,不包括文件

    type参数表示的文件类型

    • f: 普通文件
    • l: 符号链接
    • d: 目录
    • c: 字符设备
    • b: 块设备
    • s: 套接字
    • p: 管道(fifo)

    根据文件时间进行搜索

    unix文件有三种时间戳,但是没有创建时间的概念

    • 访问时间(atime):用户最近一次访问文件的时间
    • 修改时间(mtime):文件内容被修改的时间
    • 变化时间(ctime):文件元数据(权限等)最近一次被修改的时间

    find 以天为单位的时间参数:-atimr, -mtime, -ctime
    以分钟为单位的时间参数: -amin, -mmin, -cmin
    后面的参数以整数值给出,"+" 表示大于,"-"表示小于

    find . -type f -atime -7 -print
    打印七天内(时间范围1-7天)被访问过的文件

    find . -type f -atime 7 -print
    打印访问时间前7天(往回数第七天,时间范围是一天)的文件

    find . -type f -atime +7 -print
    打印七天前(时间范围:是要大于七天)被修改过的文件

    相对比较
    find . -type f -newer file.txt -print
    打印比file.txt修改时间更近的文件

    基于文件大小的搜索

    find . -type f -size +2k
    打印文件大小超过2k的文件

    find . -type f -size -2k
    打印小于2k的文件

    find . -type f -size 2k
    打印等于2k的文件

    可以使用的单位

    • b:块,512字节
    • c:字节,8位
    • w:字,两个字节
    • k:千字节
    • M:兆字节
    • G:吉字节

    删除匹配文件

    find . -type f -name "*.swp" -delete
    删除所有swp文件,-delete表示删除匹配到的文件

    基于文件权限和所有权的匹配

    find . -type f -perm 644 -print
    打印权限为644 的文件

    find . -type f -name "*.php" ! -perm 644 -print
    打印所有php文件权限不是644的文件

    结合find执行命令或动作

    find . -type f -user root -exec chown lack {} ;
    把当前目录下root用户的文件修改为lack用户的文件,{}会替换为find匹配到的每一个文件名,-user表示文件所有者,-exec用于执行命令或这动作,用";"结尾,""用来转义

    让find跳过特定的目录

    find . ( -name ".git" -prune ) -o ( -type f -print )
    打印除了.git目录下的所有文件,-prune 排除指定的目录,注意括弧前后的空格

  • 相关阅读:
    BorderContainer 背景透明一不小心就解决了!
    C#编程应用线程与委托
    第二次SQL RAP要点
    最近的学习
    BW中传输的问题
    7月总结Dotnetnuke的研究总结
    EP学习要点记忆
    盲人摸象SAP PS模块的介绍与讨论
    如何跨Client删除数据
    如何修改Portal与BW系统的链接域名
  • 原文地址:https://www.cnblogs.com/sunshine-2015/p/6771584.html
Copyright © 2020-2023  润新知