zoukankan      html  css  js  c++  java
  • Linux中find的使用(转)

    本文转自:迷途花开

    另一值得参考的是吴秦先生的博文linux中强大且常用命令:find、grep

     

    find命令用于查找文件和目录,任何位于参数之前的字符串都将被视为欲查找的目录。

    find 可以指定查找条件如名称,类型,时间,文件大小,权限和所有者查找,针对多个条件进行与或非的逻辑运算。我们可以控制find的查找的行为,还可以和其他命令组合使用。

    find、find .、find . –print三者等效。

    查找非当前目录时,列出要查找的目录。如:find /usr/lib -name readme.txt

    1. 指定查找条件

    1.1按名称查找

    find . -name readme.txt
    查找当前目录下(递归子目录)的所有名为readme.txt的文件

    find . -name *.txt

    find . -name “*.txt”

    查找当前目录下(递归子目录)的所有名称以.txt结尾的文件,注意*号的写法,需要前面加或者放到双引号中

    find . -iname *.txt

    默认find是区分大小写的,如果不想区分大小写,请使用-iname替代-name,如上则”abc.TXT”将被查找到

    1.2 按类型查找

    find . -type f
    查找当前目录下(递归子目录)的所有文件

    find . -type d
    查找当前目录下(递归子目录)的所有目录

    find . -type l
    查找当前目录下(递归子目录)的所有符号链接

    1.3 按时间查找

    1.3.1 以小时为单位的时间

    find 命令三个选项用于按照时间查找,单位都是小时:

    mtime — 文件内容上次修改时间

    atime — 文件被读取或访问的时间

    ctime — 文件状态变化时间

    这三个选项都需要配置一个n值使用,可以是-n / n / +n:
    -n   小于 n

    n    正好与 n 相等

    +n  大于 n

    find . -mtime -1

    查找当前目录下(递归子目录)的所有1小时内修改的文件和目录
    find . -mtime +1

    查找当前目录下(递归子目录)的所有修改时间超过1小时的文件和目录
    find . -mtime 1

    查找当前目录下(递归子目录)的所有恰好在1小时前修改的文件和目录

    1.3.2 以分钟为单位的时间

    用法和*time类似,mminamincmin 的不同在于单位时间是分钟,用于查找在不到1小时的时间内变化了的文件和目录

    find . -mmin -10
    查找当前目录下(递归子目录)的所有10分钟内修改的文件和目录

    find . -mmin +20
    查找当前目录下(递归子目录)的所有20分钟外1小时内修改的文件和目录

    1.3.3与特定的文件比较

    -newer,-anewer和-cnewer选项用于查找与特定的文件比较的已修改或访问过的文件,类似mtime,atime和ctime

    -newer 指内容最近被修改的文件

    -anewer 指最近被读取过的文件

    -cnewer 指状态最近发生变化的文件

    find . -newer a.txt

    查找当前目录下(递归子目录)的所有修改时间在a.txt之后(所以文件更新)的文件和目录

    1.4 按文件大小查找

    1.4.1 -size

    选项用于查找满足指定的大小条件的文件(注意不查找目录), +表示大于, -表示小于, 没有+1表示正好等于。文件大小的单位可以是字节(用c表示), kb(用k表示)。

    find . -size -100c

    查找当前目录下(递归子目录)的所有文件大小小于100字节的文件

    find . -size +100k

    查找当前目录下(递归子目录)的所有文件大小大于100k的文件

    find . -size 0

    查找当前目录下(递归子目录)的所有文件大小为0的文件

    1.4.2 -empty

    查找空文件和空文件夹, 和-size 0不同的在于-size 0 只查找空文件,或者说-empty -type f 等同于-size 0 :

    find . –empty

    查找当前目录下(递归子目录)的所有文件大小为0的文件和空文件夹

    find . -empty -type f

    查找当前目录下(递归子目录)的所有文件大小为0的文件

    find . -empty -type d

    查找当前目录下(递归子目录)的所有空目录

    1.5 按权限和所有者查找

    find . -perm 777

    查找当前目录下(递归子目录)的所有权限为777的文件和目录

    find . -perm -u=rwx

    查找当前目录下(递归子目录)的所有user权限为rwx的文件和目录

    find . -perm -ug=x

    查找当前目录下(递归子目录)的所有user和group权限为x的文件和目录

    find . -user sky

    查找当前目录下(递归子目录)的所有user为sky的文件和目录

    find . -group users

    查找当前目录下(递归子目录)的所有group为users的文件和目录

    2. 查找条件的逻辑运算

    2.1 逻辑与

    find . -name “*.java” -size -mmin -10

    find . -name “*.java” -a -size -mmin -10

    查找当前目录下(递归子目录)的所有名为*.java并且修改时间在10分钟之内的文件,-a是默认选项

    2.2 逻辑或

    find . -name “*.class” -o -name “*.jar”

    查找当前目录下(递归子目录)的所有名为*.class或者*.jar的文件和目录

    2.3 逻辑非

    find . ! -user sky

    查找当前目录下(递归子目录)的所有user不是sky的文件和目录

    3. 控制查找的行为

    find . -maxdepth 3 -name “*.txt”

    查找当前目录下(递归子目录)的所有名为*.txt的文件,目录深度不超过3层

    find . -maxdepth 1 -name “*.txt”

    查找当前目录下(不递归子目录,因为maxdepth为1)的所有名为*.txt的文件

    find . -mindepth 3 -name “*.txt”

    查找当前目录下(递归子目录)的所有名为*.txt的文件,目录深度不低于3层

    find . -mindepth 1 -name “*.txt”

    查找当前目录下的子目录中(递归子目录)的所有名为*.txt的文件,不包含当前目录

    find . -depth -name “*.txt”

    查找当前目录下(递归子目录)的所有名为*.txt的文件,每个目录都是先在目录中进行查找,然后才继续查找其子目录

    4. find和其他命令的组合

    find . -name “*.jar” -exec ls -l {} ;

    find . -name “*.jar” –ls

    查找当前目录下(递归子目录)的所有*.jar文件并使用ls -l列出详细信息

    find . -name “*.java” -exec grep HashMap {} ;

    查找当前目录下(递归子目录)的所有的含有”HashMap”字样的*.java文件

    find . -name “*.sh” -exec mv {} backup ;

    查找当前目录下(递归子目录)的所有的*.sh文件并移动到backup目录中

  • 相关阅读:
    SOD开源框架MSF(消息服务框架)介绍
    c#中foreach的一种用法
    MSSql异常处理框架
    什么是架构?有几人说的清楚
    MSSql动态行转列
    WebForm版demo,模拟手机Usb接口充电
    规范化流程不能窥探的咪咪
    我对领导者的定义
    以乞丐为最大的贵客
    程序猿,是如何逆袭的
  • 原文地址:https://www.cnblogs.com/xiehongfeng100/p/4365020.html
Copyright © 2011-2022 走看看