一、前言

  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. hdu1573:数论,线性同余方程组

    题目大意: 给定一个N ,m 找到小于N的  对于i=1....m,满足  x mod ai=bi  的 x 的数量. 分析 先求出 同余方程组 的最小解x0,然后 每增加lcm(a1...,am)都 ...

  2. 360网站卫士常用前端公共库CDN服务

    360网站卫士常用前端公共库CDN服务 360网站卫士常用前端公共库CDN服务

  3. App架构设计经验谈:接口的设计

    App与服务器的通信接口如何设计得好,需要考虑的地方挺多的,在此根据我的一些经验做一些总结分享,旨在抛砖引玉. 安全机制的设计 现在,大部分App的接口都采用RESTful架构,RESTFul最重要的 ...

  4. JSF标签大全详解

    1. JSF入门 藉由以下的几个主题,可以大致了解JSF的轮廓与特性,我们来看看网页设计人员与应用程序设计人员各负责什么. 1.1简介JSF Web应用程序的开发与传统的单机程序开发在本质上存在着太多 ...

  5. Arcgis for js载入天地图

    综述:本节讲述的是用Arcgis for js载入天地图的切片资源. 天地图的切片地图能够通过esri.layers.TiledMapServiceLayer来载入.在此将之进行了一定的封装,例如以下 ...

  6. first day for new job

    第一天上班,做个总结. 总得来说,感觉非常不错,一个结论~保持头脑清醒,好好加油. 今天主要办一些入职手续,拿到了代码,后面几天主要就是熟悉应用的功能.源代码.想好好制定个计划,定日目标. 1.功能结 ...

  7. spark 高级算子

      mapPartitionsWithIndex val func = (index: Int, iter: Iterator[(Int)]) => {   iter.toList.map(x  ...

  8. Android中的菜单

    本文参考自官方文档:https://developer.android.com/guide/topics/ui/menus.html Android为了维护app之间一个统一的操作习惯,提供了Menu ...

  9. 命令行下如何安装VMware Tools并与windows资料共享

    安装VMware Tools: 选择菜单栏“虚拟机”——“安装VMware tools” ,等待系统自动更换ISO光盘 mount /dev/cdrom /mntcd /mnttar zxvf VMw ...

  10. JavaScript 函数方法 - toString()

    Function.prototype.toString() 返回函数代码的字符串形式. 描述 Function 对象覆盖了从 Object 继承来的 Object.prototype.toString ...