zoukankan      html  css  js  c++  java
  • linux find详解

    find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。

    find的使用格式如下:

      $ find <指定目录> <指定条件> <指定动作>

      - <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。

      - <指定条件>: 所要搜索的文件的特征。

      - <指定动作>: 对搜索结果进行特定的处理。

    如果什么参数也不加,find默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。

    find的使用实例:

      $ find . -name 'my*'  (必须用引号括起来)

    搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件

      $ find . -name 'my*' -ls

    搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。

      $ find . -type f -mmin -10

    (访问过用amin,修改过用mmin,文件状态改变过用cmin)

    搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录。

    说明:find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作。 该命令提供的寻找条件可以是一个用逻辑运算符 not、and、or 组成的复合条件。逻辑运 算符 and、or、not 的含义为:

    (1) and:逻辑与,在命令中用“-a”表示,是系统缺省的选项,表示只有当所给的条 件都满足时,寻找条件才算满足。例如:

    find –name ’tmp’ –xtype c -user ’inin’
    % 该命令寻找三个给定条件都满足的所有文件

    (2) or:逻辑或,在命令中用“-o”表示。该运算符表示只要所给的条件中有一个满足 时,寻找条件就算满足。例如:

    find –name ’tmp’ –o –name ’mina*’
    % 该命令查询文件名为’tmp’或是匹配’mina*’的所有文件。

    (3) not:逻辑非,在命令中用“!”表示。该运算符表示查找不满足所给条件的文件 。例如:

    find ! –name ’tmp’
    % 该命令查询文件名不是’tmp’的所有文件。

    需要说明的是:当使用很多的逻辑选项时,可以用括号把这些选项括起来。为了避免Shell本身对括号引起误解,在话号前需要加转义字符“”来去除括号的意义。例:

    find (–name ’tmp’ –xtype c -user ’inin’ )

    该命令的各选项含义如下:

    首先,下列各个选项中的 n 值可以有三种输入方式,假设 n 为20,则:

    +20 表示20以后(21,22,23等)

    -20 表示20以前(19,18,17等)

    20 表示正好是20

    以名称和文件属性查找。

    -name ’字串’ 查找文件名匹配所给字串的所有文件,字串内可用通配符 *、?、[ ]。

    -lname ’字串’ 查找文件名匹配所给字串的所有符号链接文件,字串内可用通配符 *、?、[ ]。

    -gid n 查找属于ID号为 n 的用户组的所有文件。

    -uid n 查找属于ID号为 n 的用户的所有文件。

    -group ’字串’ 查找属于用户组名为所给字串的所有的文件。

    -user ’字串’ 查找属于用户名为所给字串的所有的文件。

    -empty 查找大小为 0的目录或文件。

    -path ’字串’ 查找路径名匹配所给字串的所有文件,字串内可用通配符*、?、[ ]。

    -perm 权限 查找具有指定权限的文件和目录,权限的表示可以如711,644。

    -size n[bckw] 查找指定文件大小的文件,n 后面的字符表示单位,缺省为 b,代表512字节的块。

    -type x 查找类型为 x 的文件,x 为下列字符之一:

    b 块设备文件

    c 字符设备文件

    d 目录文件

    p 命名管道(FIFO)

    f 普通文件

    l 符号链接文件(symbolic links)

    更多:http://os.51cto.com/art/200908/141094_1.htm

    二、find命令举例;
    1、找出当前目录及子目录下修改日期比你的test.java更近的全部.java文件;
        find . -name '*.java' -newer test.java -print

    2、找出当前目录及子目录下所有今天你修改过的java代码;
        find . -name '*.java' -mtime 0 -print

    3、上面的文件中,哪些使用了awt库;
        find . -name '*.java' -mtime 0 -print | xargs grep 'java.awt'

    4、找出“C:”下除了“C:windows”文件夹之外的所有文件
        find /cygdrive/c -path "/cygdrive/c/windows" -prune -o -print

    5、找出上面文件中所有“.jar”结尾的文件
        find /cygdrive/c -path "/cygdrive/c/windows" -prune -o -name "*.jar" -print

    6、找出当前的src目录下的".class"文件,并删除它们;
        find src -name '*.class' | xargs rm
        ps:删除之前最好先查看一下文件以确认 find src -name '*.class' | xargs ls -l 

    7、删除当前的src目录下的所有".svn"文件夹;
        find src -name '.svn' | xargs rm -r


    8、只查找当前目录下的文本文件,而不查找当前目录的子目录
        find . ! -name "." -type d -prune -o -type f -name "*.txt" -print

    . 想查找当前目录及子目录下文件大小大于10M的所有文件

    # find . -size +10000000c

    -size:表示文件大小,+表示大于某个数,-表示小于某个数。c表示单位是字节,你可以将c换成k,M,G。

     find命令都是查找当前目录及其子目录。如果不想深入到子目录中,而是只查找当前一层目录,则可以:

    # find . -maxdepth 1 -name “*.c”

    linux查找包含指定内容的文件

    grep -rn "set"  *

    -r 是递归查找

    -n 是显示行号

    * : 表示当前目录所有文件,也可以是某个文件名

    最简单的模式是grep "hello " * 

    grep 'name' -r /

    grep '指定内容' -r 目录

    上述命令就是在根目录下递归查找包含name内容的文件

        -r 递归查找文件

        -e 从文件内容查找与正则表达式匹配的行

        –i 查时不区分大小写

        -c 查找匹配的行数

        -v 从文件内容查找不匹配指定字符串的行

    # grep --help
    Usage: grep [OPTION]... PATTERN [FILE]...
    Search for PATTERN in each FILE or standard input.
    PATTERN is, by default, a basic regular expres

    从根目录开始查找所有扩展名为.log的文本文件,并找出包含”ERROR”的行 

    find / -type f -name “*.log” | xargs grep “ERROR” 

    例子:从当前目录开始查找所有扩展名为.in的文本文件,并找出包含”thermcontact”的行

    find . -name “*.in” | xargs grep “thermcontact”
  • 相关阅读:
    5天玩转C#并行和多线程编程 —— 第二天 并行集合和PLinq
    从C#垃圾回收(GC)机制中挖掘性能优化方案
    【iCore3 双核心板_FPGA】例程十三:FSMC总线通信实验——复用地址模式
    【iCore3 双核心板_ uC/OS-III】例程二:任务的建立与删除
    【iCore3 双核心板_ uC/OS-III】例程一:认识 uC/OS-III
    【iCore3 双核心板_FPGA】例程十二:Modelsim仿真实验
    【iCore3 双核心板_FPGA】例程十一:乘法器实验——乘法器使用
    【iCore3 双核心板_FPGA】例程十:锁相环实验——锁相环使用
    【iCore3 双核心板_FPGA】例程九:状态机实验——状态机使用
    【iCore3 双核心板_FPGA】例程八:触发器实验——触发器的使用
  • 原文地址:https://www.cnblogs.com/youxin/p/3543241.html
Copyright © 2011-2022 走看看