一、前言

  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. 操作系统——IO缓存技术

    一.为什么引入缓存技术 为了解决cpu速度和外部设备速度不匹配的问题. 降低了io对cpu的中断的次数.每进行一次IO设备的时间都非常长,所以把数据先放入缓冲区,再进行IO操作. 二.缓冲技术的实现 ...

  2. Laravel 4 Blade模板引擎

    http://my.oschina.net/5say/blog/201290 模板输出 基本输出 1 <!-- app/views/example.blade.php --> 2 < ...

  3. FileZilla简单介绍及运用

    一.FileZilla简介 FileZilla是一款免费开源的FTP客户端软件,并且还提供了服务器版本.虽然它是免费软件,可性能却一点也不含糊,比起那些共享软件来有过之而无不及,具备大多数的FTP软件 ...

  4. .net中的特性

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

  5. 常用SQL语句学习整理

    增 insert into table_name (column_name1,column_name2) values (value1,value2) 删 delete from table_name ...

  6. 头文件 .h 与源文件 .ccp 的区别

    .h 文件一般是用来定义的,比如定义函数.类.结构体等: .cpp 文件则是对头文件的定义进行实现. include .h文件,可以调用你声明的函数.类等.当然,比较简单的类.函数,你也可以直接在头文 ...

  7. Android编程心得-JSON使用心得(二)

    在Android开发中,我们经常会用到JSON来与网络数据进行交互,下面我来介绍如何对JSON数据进行解析与制造 1.当我们需要对如下JSON串进行制造时: { "download" ...

  8. jquery.BannerRotator.js

    项目地址:https://github.com/snipertulip/BannerRotator 演示地址:http://snipertulip.github.io/BannerRotator/de ...

  9. C# post请求 HttpWebRequest

    //body是要传递的参数,格式"roleId=1&uid=2" //post的cotentType填写: //"application/x-www-form-u ...

  10. [模拟炉石](一)让游戏过程显示到cocos2d中

    在上篇中,如果运行了fireplace的tests/full_game.py,这个程序将一个游戏过程在终端上运行完成,可以看到整个过程,那么第一步要做的就是将这个过程显示到cocos2d创建的场景中去 ...