如何使用Unix/Linux find命令 ——磨刀不误砍柴工系列

原创 2012年05月16日 11:22:31

如何使用Unix/Linux find命令

                        ——磨刀不误砍柴工系列

作者:Gary Gao, garygaowork#gmail.com

find 命令是 UNIX 程序员的技能中功能最强大和最有用的命令之一。它通过许多强大的支持方式,让文件查找显示任务变得更加轻松。

find命令实例: 

    1.基于 目录/文件名称/文件类型 来搜索

    在当前目录或子目录中查找所有html文件,我们可以使用:

find -name "*.html" -type f
     在/usr/bin中查找所有sh文件
find /usr/bin -name "*.sh" -type f

    该命令有两个测试条件,第一个,“-name”用于检验搜索过程中的每个文件名,如果你需要对大小写敏感,可以使用“-iname”代替。第二个参数是“-type”

    它用于指定你感兴  趣的文件类型。“f”表示我们查找的是普通文件,我们可以使用“d”表示目录或使用l”或"s"表示符号连接。在 find 手册中可以看到该工具的所有选项。

find /-maxdepth 1 -name "*.html" -type f

    Tips:-maxdepth 选项放在最前面

  默认情况下,find遍历所有子目录,但是你可以通过指定最大深度来控制这个行为。在前面的例子中,如果我们只想搜索这两个目录不想搜索下一层,你可以 添加“-maxdepth 1”到命令中。设置最大深度为0表示只检验命令行中的给定文件。同样,你可以设定最小深度,从而避免搜索位于根目录的文件。

    2.基于 用户/用户组 来搜索                                                       

    find 的另一个应用是搜索属于某个给定用户的文件,因此为了搜索我的系统中所有属于我的文件,我使用以下命令:

find / -user gary
      同样可以搜索基于组用户的文件,使用“-group”参数。

    3.基于 文件相关的时间特征 来搜索

    相关选项:

    分别使用“-ctime”“-atime”“-mtime”参数来指定最后创建时间,最后访问时间和最后修改时间。(单位是"")

    如果你需要更精确地搜索,可以使用分钟变量“-cmin”“-amin”“-mmin”

find ./   -mtime 0          ;返回最近24小时内修改过的文件。./代表需要查找的文件夹
find ./ -mtime 1  返回的是前48~24小时修改过的文件。而不是48小时以内修改过的文件。
find -ctime -1    搜索最近两天创建的文件

    注意:

    1前面的“-”表示我们是从今天向以前的日期范围搜索,与数字前面没有"-"是有区别的。如果你刚犯了一个错误但不确定会影响到那些文件,

    这很简单可以使用如下查询:find -mmin -5

    可以用以下命令查看atimectime

    ls -lu  或者 ls -l --time=atime 显示文件的atime
    ls -lc 或者  ls -l --time=ctime 显示文件的ctime

    在提供一个例子,搜索当前目录下前20分钟到10分钟修改过的文件。

find . -mmin +9 -mmin -21

    还可以使用 "-newer","-anewer","-cnewer"参数来指定一个文件,将其与要搜索的文件进行时间的比较。

        • -newer 指内容最近被修改的文件 
        • -anewer 指最近被读取过的文件 
        • -cnewer 指状态最近发生变化的文件(查看文件状态命令 stat filename

    例如,查找在sum.java 之后修改的文件

find -newer "sum.java"

    4.基于 文件的大小 来搜索

    例如我们知道一个Linux文件大小为1,500 bytes,那么我们可是使用如下命令来查询

find . -size 1500c

    字符 表明这个要查找的文件的大小是以bytes为单位。如果我们连这个文件的具体大小都不知道,那么在Linux中还可以进行模糊查找方式来解决。例如我们输 入

find . -size +10000000c
    这个命令,则标明我们指定系统在根目录中查找出大于10000000字节的文件并显示出来。命令中的是表示要求系统只列出大于指定大小的文件,

   而使 用“-”则表示要求系统列出小于指定大小的文件。

    还有很多例子,
    搜索大小为10M的文件

find . -size 10M

    搜索大于10M的文件

find . -size +10M

    找到小于10M的文件

find . -size -10M

    要列出所有长度为零的文件,请使用下面的命令:

find . -empty -exec ls {} \;    注意结尾的分号

    在查找到空文件之后,您可以选择用 rm 命令来代替 ls 命令,以删除这些文件。

    5. 基于 文件的权限 来搜索

    查找当前目录下所有文件权限为755的文件

find . -perm 755 -print

    6.使用混合查找方式查找文件

    find命令可以使用混合查找的方法,例如我们想在/tmp目录中查找大于100000000字节并且在48小时内修改的某个文件,我们可以使用-and 来把两个查找选项链接

  起来组合成一个混合的查找方式。

find /tmp -size +10000000c -and -mtime +2

    如何搜索修盖时间介于f1f2各自的修改时间之间的文件?

find . -newer f1 -and ! -newer f2      //f1的修改时间应早于f2的修改时间

   学习过计算机语言的朋友都知道,在计算机语言里,使用and ,or 分别表示的关系。在Linux系统的查找命令中一样通用。
  还有这样的例子,

find / -user fred -or -user george

  我们可以解释为在/tmp目录中查找属于fred或者george这两个用户的文件。
  在find命令中还可以使用的关系来查找文件,如果我们要在/tmp目录中查找所有不属于panda的文件,使用一个简单的

find /tmp ! -user panda

    更好的利用find

    7.快速执行上一次的find命令而不用重复输入参数

!find

    事实上,"!"可以用在任何unix/linux命令的前面,以执行上一条同种类型的命令。

    8.改变显示结果

    find对文件执行的标准行为是显示出文件名,这就是为什么如果你跟踪结果,就会看到一系列文件名的原因。如果你想使用这些结果作为另外一个过滤器的输入的话,

   这将会十分有用。但是如果你需要结果的更多信息,你可以令find输出与ls –l 同样的结果:

find -user gary -iname "*.html" -ls

    这个命令将会返回文件权限和时间信息。

    9.将搜索结果作为程序的输入

    可以通过使用“-exec”参数,来让find命令对每个搜索结果运行任何程序。

    如果要删除当前目录中所有扩展名为“.tmp”的文件。

find -name ".tmp" -exec rm {} \ ;      //注意结尾分号

    上面两个大括号将会被相应的文件名代替,反斜杠用来告诉find何时命令结束。

    find常和chmod结合使用快速改变大量文件的文件权限,或者和grepsed结合使用来选择性的搜索或使用正则表达式修改文本。使用它作为一个脚本的输入,

   你可以让费时的任务自动完成,例如清除一年内没有访问的文件,或者自动备份修改的文件。

   另一个例子: 把当前目录及所有子目录的权限更改为755

find . -type d -exec chmod 755 {} \;

    10.查找并显示文件的方法

  查找到某个文件是我们的目的,我们更想知道查找到的文件的详细信息和属性,如果我们采取现查找文件,在使用LS命令来查看文件信息是相当繁琐的,

    现在我们也可以把这两个命令结合起来使用。

find / -name "httpd.conf" -ls

  系统查找到httpd.conf文件后立即在屏幕上显示httpd.conf文件信息。
  12063 34 -rw-r--r-- 1 root root 33545 Dec 30 15:36 /etc/httpd/conf/httpd.conf

  下面的表格就是一些常用的查找文件并显示文件信息的参数和使用方法

选项

用途描述

-exec command

查找并执行命令

-fprint file

打印文件完整文件名

-fprint0 file

打印文件完整文件名包括空的文件

-fprintf file format

打印文件格式

-ok command

给用户命令执行操作,根据用户的确认输入执行

-printf format

打印文件格式

-ls

打印同种文件格式的文件


    参考:

   [1].linux/unix中如何用find命令详解 

     http://www.tongcx.com/node/86

    [2].使用 UNIX find 命令的高级技术 

    http://www.ibm.com/developerworks/cn/aix/library/es-unix-find.html

    [3].10 Example of find command in Unix and Linux (find命令的基本用法以及高级技巧都有介绍)

    http://javarevisited.blogspot.com/2011/03/10-find-command-in-unix-examples-basic.html

    [4].Top 10 examples of find command in unix and linux

    http://www.cloudhadoop.com/2012/02/top-10-examples-of-find-command-in-unix.html

    [5].Find Command in Unix and Linux Examples (极丰富的关于find命令的例子)

    http://www.folkstalk.com/2011/12/101-examples-of-using-find-command-in.html

    [6].A Unix/Linux “find” Command Tutorial (实用的,短小精悍的教程)

    http://content.hccfl.edu/pollock/Unix/FindCmd.htm

    注:以上链接如果无法进入,请翻墙。


转载本文请注明作者和出处[Gary的影响力]http://garyelephant.me,请勿用于任何商业用途!

Author: Gary Gao 关注互联网、分布式、高并发、自动化、软件团队
支持我的工作:  https://me.alipay.com/garygao


版权声明:本文为博主(微博@Gary的影响力)原创文章,未经博主允许不得转载。博客地址:http://garyelephant.me

相关文章推荐

csdn 普通编辑器 代码样式 代码高亮 高亮代码皮肤更换

其实已经不是刚用csdn了,已经有一段时间了;刚用csdn的时候就一直用的是Markdown编辑器来写博客,所有的排版,样式不用关系,只关心内容就好。 至今为止,没有用过一次普通的编辑器,原因就是,代...

Python 中使用 string-escape 将带转义的字节码字符串转换为 utf-8 字符串

不懂不可怕,可怕的是压根不知道
  • tiwoo
  • tiwoo
  • 2015年12月16日 23:24
  • 4801

如何使用Unix/Linux grep命令——磨刀不误砍柴工系列

如何使用Unix/Linux grep命令     ——磨刀不误砍柴工系列      Garygaowork#gmail.com        grep在一个或多个文件中查找与模式字符串(patt...

磨刀不误砍柴工——实验工具准备

写在最前面的话:        后面的一系列博客主要围绕MIT-OS的学习课程来创建;        为什么会学习mit-os?        1)对于复杂的事物,一种常见的思维就是从简单到复杂的思维...
  • yiye_01
  • yiye_01
  • 2015年09月13日 20:14
  • 412

《代码阅读方法与实践》读后感——磨刀不误砍柴工

感谢本书的作者以及译者,在本书的帮助下,我顺利接手代码                     每个人都有自己的阅读方式、方法和工具,也许改变并不容易。 对于程序员本书算是一本辅助性...

Cocos2d-x开发系列 磨刀不误砍柴工

项目初期的一些问题(版本选择、语言选择、环境搭建、一次触控技术交流会问题)...
  • diyal
  • diyal
  • 2015年08月28日 13:55
  • 372

磨刀不误砍柴工——模板方法模式

1.定义   定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可以重新定义该算法的某些特定步骤。 2.理解   提到模板,我们大家都很熟悉,说白了它...

黑马程序员--Java学习日记之eclipse开发工具的熟练使用,磨刀不误砍柴工!

1:用Eclipse写一个HelloWorld案例,最终在控制台输出你的名字  A:创建项目  B:在src目录下创建包。cn.itcast  C:在cn.itcast包下创建类。HelloWorld...
  • Memor_
  • Memor_
  • 2015年06月22日 18:02
  • 411

磨刀不误砍柴工-----小菜鸟对代码的认识

相见欢    无计调试代码,心如绞。烦躁菜鸟屋内直发愁! 剪不断,理还乱,怎么办?别是一番滋味在心头!   作者简介:IT小菜鸟,河北廊坊提高班人士   历史背景:2012年夏天...

磨刀不误砍柴工—android应用程序开发环境搭建

这篇文章的主要内容是如何去搭建android应用程序的开发环境。网上有很多这样的文章,甚至我刚开始学习android应用程序开发的时候,也是从网上找了一篇文章,按部就班地把环境搭好的。为什么我还要重复...
  • dbdaf
  • dbdaf
  • 2013年03月17日 14:47
  • 472
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何使用Unix/Linux find命令 ——磨刀不误砍柴工系列
举报原因:
原因补充:

(最多只允许输入30个字)