一、前言

  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. c++命名空间using

    #include<iostream> namespace run1 { ; } namespace run2 { ; void show() { std::cout << x ...

  2. c语言sizeof与strlen的区别

    #include <stdio.h> #include <stdlib.h> #include <string.h> //strlen与sizeof的区别 //st ...

  3. Android 读取手机某个文件夹目录及子文件夹中所有的txt文件

    1. activity_main.xml文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/andro ...

  4. 去掉MySQL字段中的空格

    mysql replace 函数   语法:replace(object,search,replace)   意思:把object中出现search的全部替换为replace   案例: SQL Co ...

  5. JS~对img标签进行优化,使用onerror进行默认图像显示

    对于网站图像的不显示有很多原因,网络问题,文件本身问题,文件URL问题等,而当图像加载失败时会触发onerror这个事件,我们利用这点,可以有效的避免图像加载失败的尴尬! JS代码 //图像加载出错时 ...

  6. 用户控件(.ascx)与<ul><li>以及<a>布局之小结

    用户控件(.ascx)与<ul><li>以及<a>布局 小结 一.用户控件(.ascx) 1.aspx是浏览器直接访问的页面,而ascx是用户控件,一般是用来重用. ...

  7. 破解Veeam过程

    1)运行Veeam_Backup_Setup.exe,但是不要继续下一步: 2)进入到%temp%\IXP000.TMP目录,例如windows xp sp3环境默认为C:\Documents and ...

  8. Spark 初级算子

    #常用Transformation(即转换,延迟加载) #通过并行化scala集合创建RDD val rdd1 = sc.parallelize(Array(1,2,3,4,5,6,7,8)) #查看 ...

  9. IPMI 配置BMC用户设置

    IPMI 配置BMC用户设置 本文档共介绍5条ipmi设置user的命令,这些命令需要使用root权限才能使用,其中- H为需要操作的BMC ip,-I lanplus为使用rmcp+协议发送命令,- ...

  10. Centos7安装Oracle JDK

    查看Linux是否自带的JDK,如有openJDK,则卸载 java -version