find命令的功能很强大,查找文件的选项很多,所以这是一个很实用并且很常用的linux命令。但是他有个缺点就是搜索的时候比较慢的。而与之相对的有一个locate命令。

  1. find的命令格式

    find  pathname  -option  [-print ] [  -exec  -ok   command]  {} \;

  

  2. 命令参数:

pathname : find命令所查找的目录路径。相对路径和绝对路径都可以的。

   -print:   find命令将匹配的文件输出到标准输出(默认就是将找到的文件输出到标准输出)

    -exec command {} \ :  find命令对匹配的文件执行该参数所给出的command命令,注意"{}"与  "\"之间的空格。

    -exec ok {} \:   与exec命令参数差不多,只不过多了一个检查,在执行每一个命令之前要求用户来确认是否执行。

  

 3. 命令的选项:

    常用:

    -name filename :   查找名为filename的文件(常用的选项)

    文件属性:

    -perm  xxxx   :   按照xxxx代表的执行权限来查找

    -user   username :按照文件属主来进行查找

    -group  groupname: 按照文件属组进行查找

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

    -nogroup         查找无有效属组的文件,即属主在/etc/groups中不存在的

    文件时间属性:

    -mtime -n +n   按照文件更改时间进行查找  ,  -n指n天以内   +n指n天以前

    -atime  -n  +n   按照文件访问时间来查找

    -ctime  -n   +n   按照文件创建时间来查找

   -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命令,将这些文件备份到磁盘设备中。

    -prune : 忽略某个目录

  

    另外,下面三个的区别:

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

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

    -cmin n   查找系统中最后N分钟被改变文件状态的文件
    -ctime n  查找系统中最后n*24小时被改变文件状态的文件
    -mmin n   查找系统中最后N分钟被改变文件数据的文件
    -mtime n  查找系统中最后n*24小时被改变文件数据的文件

  4. 使用实例

  (1)-name选项

比较常用的选项,并且可以使用匹配符或者正则表达式来匹配文件(匹配符与正则的区别需要注意下)。如果是具体的文件名可以引号引起来也可以不用引号,但是文件名匹配模式是一定要用引号引起来的。

    

在根目录“/”下查找文件名为 "test.txt"的文件
# find / -name "test.txt" -print #匹配符与正则表达式的应用:
查找目录下所有的 “*.log”
# find . -name "*.log" -print 查找目录下以大写字母开头的文件
# find / -name "[A-Z]*" -print 查找一个以小写字母开头,数字结尾的文件
# find / -name "[a-z]*[0-9]" -print

  

    (2)文件属性选项

      -perm   xxx   

查找文件权限为755的文件,可以和-name混合使用
# find / -perm -print 查找一个文件属主是root,属组也是root的文件(这种单独使用是没什么意义的,这都是一些限制条件混合使用)
# find / -user root -group root -print 当然还有查找属主和属组都已经被删除的文件
# find . -nouser -nogroup -print

    (3)文件时间属性

# 查找最后48小时内访问过的文件
$ find / -atime - # 查找最后24小时内修改过的文件
$ find / -mtime -

    (4)忽略某个目录

使用选项 -prune  支出忽略的目录。使用-prune选项的时候注意不要和-depth一起用,-prune会被忽略。

#  忽略test目录下的hello目录
$ find test -path "test/hello" -prune -o -print

说明下:find  [-path] [expression]

在路径列表后面是表达式

find test  -path "test/hello" -prune -o -print
-a 和 -o 是shell中的短路求值,与 && 和 || 结果类似。
-path "test/hello" 为真,则求值-prune ,则与逻辑为真,后面的-print不需要执行,否则求值 -print(利用-o的短路特性)
可以理解为如下所示的shell流程:
if -path "test/hello" then
-prune
else
-print

忽略多个目录的操作:

find  test  \( -path test/test4 -o -path test/test3 \)  -prune  -o  -print 

增加一个转义 "\"

查找某一确定文件,-name等选项加在-o 之后

命令:

find test \(-path test/test4 -o -path test/test3 \) -prune -o -name "*.log" -print

   (5)组合使用:操作之后加入命令   find  pathname  -option  [-print ] [  -exec  -ok   command]  {} \;

#查看当前目录下的所有普通文件并通过ls -l来显示详细信息
$ find . -type f -exec ls -l {} \; #还可以再加一些条件,组合使用
$ find logs -type f -mtime +5 -exec -ok rm -rf {} \
#删除五日以前有更改的文件 这个命令在运维的时候很有用,删除一些日志文件的时候。

*有一个很好的应用场景是:find查找文件,然后grep看文件里面是否有我们需要的字段

#在/tmp中寻找*.h,并在这些文件中查找"TEST"字段
$ find /tmp -name *.h | xargs -n50 grep TEST
$ find /tmp -name "*.h" -exec grep "TEST" {} \; -print #将查找到的文件复制到指定地方
$ find /tmp -name test -exec cp '{}' /test ';' 特殊文件可以使用cpio的
$ find dir -name filename -print | cpio -pdv newdir (暂时还不之后cpio的用法,先记录下来) #可以使用管道来处理find查找出来的 文件列表
$ find ./ -name "*.php" | ls -l -full-time 2>/dev/null | grep "2016-07-03 22:39"
查找2016-07-03 22:39更改过的文件

  

-----

参考链接:

每天一个linux命令find

linux find用法实例

Linux Find 命令精通指南

吴秦(Tyler)【日记小常】linux中强大且常用命令:find,grep

25simple examples of Linux Find command

【one day one linux】find 用法详解小记的更多相关文章

  1. linux curl用法详解

    linux ‍‍curl用法详解 ‍‍curl的应用方式,一是可以直接通过命令行工具,另一种是利用libcurl库做上层的开发.本篇主要总结一下命令行工具的http相关的应用, 尤其是http下载方面 ...

  2. Linux重定向用法详解

    大家好,我是良许. 相信大家平时都会有需要复制粘贴数据的时候,如果是打开文件进行复制粘贴,就不可避免的需要较多的鼠标与键盘的操作,就会比较繁琐.那么有没有可以省掉这些繁琐操作的复制粘贴的方法呢? 答案 ...

  3. linux管道命令grep命令参数及用法详解---附使用案例|grep

    功能说明:查找文件里符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...

  4. linux mount命令参数及用法详解

    linux mount命令参数及用法详解 非原创,主要来自 http://www.360doc.com/content/13/0608/14/12600778_291501907.shtml. htt ...

  5. 【转】linux expr命令参数及用法详解

    在抓包过程中,查看某个设定时间内,数据上下行多少,用命令expr 计算! --------------------------------------------------------------- ...

  6. linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)

    linux useradd(adduser)命令参数及用法详解(linux创建新用户命令) useradd可用来建立用户帐号.帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号 ...

  7. linux dmesg命令参数及用法详解(linux显示开机信息命令)

    linux dmesg命令参数及用法详解(linux显示开机信息命令) http://blog.csdn.net/zhongyhc/article/details/8909905 功能说明:显示开机信 ...

  8. linux sed命令参数及用法详解

    linux sed命令参数及用法详解 http://blog.csdn.net/namecyf/article/details/7336308 1. Sed简介 sed 是一种在线编辑器,它一次处理一 ...

  9. linux dd命令参数及用法详解---用指定大小的块拷贝一个文件(也可整盘备份)

    linux dd命令参数及用法详解---用指定大小的块拷贝一个文件 日期:2010-06-14 点击:3830 来源: 未知 分享至:            linux dd命令使用详解 dd 的主要 ...

随机推荐

  1. MySQL基础语句与其在Python中的使用

    一.MySQL基础语句 $ mysql -u root -p (有密码时) $ mysql -u root     (无密码时) QUIT (or \q)  退出 查看当前所有数据库 show dat ...

  2. 你真的了解volatile吗,关于volatile的那些事

    很早就接触了volatile,但是并没有特别深入的去研究她,只有一个朦胧的概念,就是觉得 用她来解决可见性的,但可见性又是什么呢? 最近经过查阅各种资料,并结合自己的思考和实践,对volatile有了 ...

  3. Js里面的数组去重方法

    去掉数组里面重复的有很多种,我这里就说一种比较简单的吧. var arr=[23,33,44,33,44,66,44,55,44,4,44,33,23]; for(var i=0;i<arr.l ...

  4. synchronized的4种用法

    1.方法声明时使用,放在范围操作符(public等)之后,返回类型声明(void等)之前.这时,线程获得的是成员锁,即一次只能有一个线程进入该方法,其他线程要想在此时调用该方法,只能排队等候,当前线程 ...

  5. css布局与盒子模型

    一.    盒子模型 注: 1.红色为border; 2.背景应用于内容.内边距.边框组成的区域: 3.Width和height指的是内容区域的高度和宽度. 边框属性: 1.  padding属性:( ...

  6. Java 中的数组

    1.声明数组String [] arr;int arr1[];String[] array=new String[5];int score[]=new int[3]; 2.初始化数组://静态初始化i ...

  7. 图解Javascript——作用域、作用域链、闭包

    什么是作用域? 作用域是一种规则,在代码编译阶段就确定了,规定了变量与函数的可被访问的范围.全局变量拥有全局作用域,局部变量则拥有局部作用域. js是一种没有块级作用域的语言(包括if.for等语句的 ...

  8. static成员是可以被其所在class创建的实例访问!!!

    <span style="font-family: Arial, Helvetica, sans-serif; ">关于静态方法以及静态变量的使用就不详细的说了,我就这 ...

  9. PHP的错误处理

    PHP的错误处理机制 php的错误处理是比较复杂的, 本文讲解php中所有错误相关的重要知识点做一次梳理, 便于理解php的错误机制. 基础知识 在此之前, 先熟悉一下php error的基础知识 预 ...

  10. 【iOS】7.4 定位服务->2.1.4 定位 - 官方框架CoreLocation 案例:指南针效果

    本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正. 本文相关目录: ================== 所属文集:[iOS]07 设备工具 === ...