一、前言

  find命令是linux使用过程中经常用到的命令,但可能大家只会如下使用find

find ./

  或者这样使用

find ./ | grep str

  上述命令等同于

find ./ -name "*txt*"

  可见,find命令与grep命名一个不同点是: find命名是完全匹配,grep命令默认就是最小匹配

  然而,find其实何其强大,下面我们就来系统的学习下吧!

  二、一些find的应用实例

  首先,我们列举find的应用的实例,看怎样使用find解决实际问题:

  1、使用find查找特定文件名的文件

    在默认情况下find会对文件路径与文件名字符串同时进行查找,而要想只对文件名进行查找需要加上-type f限制

find ./ -type f -name "*txt"

  上面命令的意思是,查找当前目录下文件名以txt结尾的文件。

  在find命令中,-type选项支持的查找对象包括

    -type c

      其中c可以为如下值:

      b  块设备(block)

      c  字符设备(character)

      d     目录(directory)

      p  命名管道(named pipe) 

      f  普通文件(file)

      l  符号链接(link)

      s  套接字(socket) 

      D  门(solaris中才有)

  2、指定find命名的查找深度为2

find ./ -maxdepth  -name "*txt"

  这条命令也非常有用,因为我们经常在查找文件时不希望递归某个文件夹下的所有子目录,于是我们可以使用-maxdepth指定递归的深度

  3、查找文件大小大于200k,小于2MB的文件

find ./ -name "*txt" -size  +200k -a -size -2M

  在find命令中,不同的查询条件默认的逻辑关系是“与”,同时其条件的执行顺序是从左到右,可见条件的书写顺序可能也会影响查询的结果。

  在find中支持的逻辑关系如下:

  -a  逻辑与

  -o   逻辑或

  not/!  逻辑非

 

  4、使用正则表达式

find ./ -regex ".*txt"

  find中使用正则表达式是要注意,只有正则匹配整个文件路径时才算成功

  三、find命令的一些参数与选项

  find命令的一般格式:

find pathname -options [-print -exec -ok ...]

  find命令的参数;

    pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。

    -print: find命令将匹配的文件输出到标准输出。

    -exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } ;,注意{ }和;之间的空格。

    -ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

 find命令选项

  -name

    按照文件名查找文件。

  -perm

    按照文件权限来查找文件。

  -prune

    使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。

  -user

    按照文件属主来查找文件。

  -group

    按照文件所属的组来查找文件。

  -mtime -n +n

    按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项。

  -nogroup

    查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。

  -nouser

    查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。

  -newer file1 ! file2

    查找更改时间比文件file1新但比文件file2旧的文件。

  -type

    查找某一类型的文件,诸如:

    b - 块设备文件。

    d - 目录。

    c - 字符设备文件。

    p - 管道文件。

    l - 符号链接文件。

    f - 普通文件。

  -size n:

    [c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。

  -fstype:

    查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。

  -mount:

    在查找文件时不跨越文件系统mount点。

  -follow:

    如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。

  -cpio:

    对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。

  另外,下面三个的区别:

  -amin n

    查找系统中最后N分钟访问的文件

  -atime n

    查找系统中最后n*24小时访问的文件

  -cmin n

    查找系统中最后N分钟被改变文件状态的文件

  -ctime n

    查找系统中最后n*24小时被改变文件状态的文件

  -mmin n

    查找系统中最后N分钟被改变文件数据的文件

  -mtime n

    查找系统中最后n*24小时被改变文件数据的文件

  4、使用exec或ok来执行shell命令

    使用find命令时,只要把想要的操作写在一个文件里,就可以用exec来配合find命令查找,很方便的

    在有些操作系统中只允许-exec选项执行诸如l s或ls -l这样的命令。大多数用户使用这一选项是为了查找旧文件并删除它们。建议在真正执行rm命令删除文件之前,最好先用ls命令看一下,确认它们是所要删除的文件。

  exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一个,最后是一个分号。为了使用exec选项,必须要同时使用print选项。如果验证一下find命令,会发现该命令只输出从当前路径起的相对路径及文件名。

  例如:为了用ls -l命令列出所匹配到的文件,可以把ls -l命令放在find命令的-exec选项中

 find ./ -type f -exec ls -l { } ;

  

精通find命令的更多相关文章

  1. Git版本控制软件结合GitHub从入门到精通常用命令学习手册(转)

    简要参考:http://www.tuicool.com/articles/mEvaq2 http://gitref.org/zh/index.html GIT 学习手册简介 本站为 Git 学习参考手 ...

  2. 【转】Git版本控制软件从入门到精通学习手册

    GIT 学习手册简介 本站为 Git 学习参考手册.目的是为学习与记忆 Git 使用中最重要.最普遍的命令提供快速翻阅. 这些命令以你可能需要的操作类型划分,并且将提供日常使用中需要的一些常用的命令以 ...

  3. Scrapy命令行工具简介

    Windows 10家庭中文版,Python 3.6.4,virtualenv 16.0.0,Scrapy 1.5.0, 在最初使用Scrapy时,使用编辑器或IDE手动编写模块来创建爬虫(Spide ...

  4. 源代码管理之Git命令的使用

    目录 02.源代码管理之Git命令的使用 2.Git命令行演练-个人开发 2.1 如何学习git指令 2.2 初始化创建本地仓库 2.3 个人开发基本演练 2.4 Git的基本常识 3.Git命令行演 ...

  5. git-入门

    一.简介 Git是目前世界上最先进的分布式版本控制系统,Git中绝大部分操作都是访问本地资源,不需要网络,其中有三个概念比较重要:1. 工作目录 2. 暂存区域 3.本地仓库. 简单说明一下,工作目录 ...

  6. 资源搜集:Git精品文章推荐,常年更新

    以下放置的是搜集到的Git精品文章,常年更新: Git 常用命令详解(二) Git版本控制软件结合GitHub从入门到精通常用命令学习手册 Pro Git(中文版)

  7. Git操作指令进阶

    注意: 学习前请先配置好Git客户端 相关文章:Git客户端图文详解如何安装配置GitHub操作流程攻略 官方中文手册:http://git-scm.com/book/zh GIT 学习手册简介 本站 ...

  8. GRUB4DOS入门

    目 录 第1章 GRUB4DOS入门    1 1.1 用途    1 1.2 安装    1 1.2.1 修改MBR    1 1.2.2 修改PBR    3 1.2.3 DOS    4 1.2 ...

  9. deep learning新征程

    deep learning新征程(一) zoerywzhou@gmail.com http://www.cnblogs.com/swje/ 作者:Zhouwan  2015-11-26   声明: 1 ...

随机推荐

  1. delphi 简单的删除字符串尾部数字的代码

    delphi  简单的删除字符串尾部数字的代码 方式一: function FilterShowName(const sName: String): String; var I: Integer; b ...

  2. Opencv 简单的图片显示

    #include <opencv\cv.h> #include <opencv\highgui.h> #include <opencv\cxcore.h> int ...

  3. 数学之路(3)-机器学习(3)-机器学习算法-PCA

    PCA 主成分分析(Principal components analysis,PCA),维基百科给出一个较容易理解的定义:“PCA是一个正交化线性变换,把数据变换到一个新的坐标系统中,使得这一数据的 ...

  4. Qt 界面使用自己定义控件 &quot;提升为&quot;

    1.效果图 我做了一个很easy的样例,一个能够显示颜色的QLabel,边上有个button,点击,跳出颜色选取的Dialog,然后选择一个颜色.这个QLabel会变成什么颜色. 2.ColorLab ...

  5. bat处理文件

    bat处理文件 作用:可以一次性执行多个命令的文件. 为什么要学bat处理文件? 快速运行一个软件一般都会把软件打包一个jar包,但是jar双击可以运行仅对图形化界面的软件起作用,对于控制台的程序是不 ...

  6. C#使用checked关键字处理"溢出"错误

    代码如下: private void btnCalculate_Click(object sender, EventArgs e) { byte num1, num2;//定义两个byte变量 if( ...

  7. css设置滚动条颜色与样式以及如何去掉与隐藏滚动条

    我们大家在浏览网页的时偶尔会看到很漂亮的各种颜色样式的滚动条,这就是通过css代码控制来实现的,于是本人搜集整理一番,这里和大家分享一下使用CSS设置滚动条颜色以及如何去掉滚动条的方法,需要的朋友可以 ...

  8. .net中的特性

    本文来之:http://hi.baidu.com/sanlng/item/afa31eed0a383e0e570f1d3e 在一般的应用中,特性(Attribute,以称为属性)好像被使用的不是很多. ...

  9. Canvas简单动画和像素处理

    动画 利用JavaScript,可以在canvas元素上很容易地产生动画效果. var posX = 20, posY = 100; setInterval(function() { context. ...

  10. asp.net中的主题

    用了更方便,在.net网站上,右键,选择添加主题,然后命一个名子,如果,有四个主题, 只需要在web.config的page节里加上styleSheetTheme="Red",就会 ...