基本语法

  find [查找目录] [选项] [查找规则] [查找完后的操作] 即:find pathname -option -condition [-print -exec -ok …]

选项参数

  • -amin                   # 查找在系统中最后N分钟访问的文件
  • -anewer<参考文件或目录>:   查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录;
  • -atime    -n +n               #按文件访问时间来查GIN: 0px">
  • -cmin<分钟>:                 查找在指定时间之时被更改过的文件或目录;
  • -cnewer<参考文件或目录>       查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
  • -ctime    -n +n               #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
  • -daystart:                   从本日开始计算时间;
  • -depth:                      从指定目录下最深层的子目录开始查找;
  • -expty:                      寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录;
  • -exec<执行指令>:             假设find指令的回传值为True,就执行该指令;
  • -false:                      将find指令的回传值皆设为False;
  • -fls<列表文件>:              此参数的效果和指定“-ls”参数类似,但会把结果保存为指定的列表文件;
  • -follow:                     #如果遇到符号链接文件,就跟踪链接所指的文件
  • -fprint<列表文件>:           此参数的效果和指定“-print”参数类似,但会把结果保存成指定的列表文件;
  • -fprint0<列表文件>:          此参数的效果和指定“-print0”参数类似,但会把结果保存成指定的列表文件;
  • -fprintf<列表文件><输出格式>:此参数的效果和指定“-printf”参数类似,但会把结果保存成指定的列表文件;
  • -fstype                       #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
  • -gid<群组识别码>:            查找符合指定之群组识别码的文件或目录;
  • -group<群组名称>:            查找符合指定之群组名称的文件或目录;
  • -help或——help:             在线帮助;
  • -ilname<范本样式>:           此参数的效果和指定“-lname”参数类似,但忽略字符大小写的差别;
  • -iname<范本样式>:            此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别;
  • -inum:                       查找符合指定的inode编号的文件或目录;
  • -ipath<范本样式>:            此参数的效果和指定“-path”参数类似,但忽略字符大小写的差别;
  • -iregex<范本样式>:           此参数的效果和指定“-regexe”参数类似,但忽略字符大小写的差别;
  • -links<连接数目>:            查找符合指定的硬连接数目的文件或目录;
  • -iname<范本样式>:            指定字符串作为寻找符号连接的范本样式;
  • -ls:                         假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出;
  • -maxdepth<目录层级>:         设置最大目录层级;
  • -mindepth<目录层级>:         设置最小目录层级;
  • -mmin                     # 查找在系统中最后N分钟里修改过的文件
  • -mount:                      #查文件时不跨越文件系统mount点,此参数的效果和指定“-xdev”相同;
  • -mtime   -n +n                #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
  • -name<范本样式>:             指定字符串作为寻找文件或目录的范本样式;
  • -newer   f1 !f2               #查更改时间比f1新但比f2旧的文件
  • -nogroup                      #查无有效属组的文件,即文件的属组在/etc/groups中不存在
  • -noleaf:                     不去考虑目录至少需拥有两个硬连接存在;
  • -nouser                       #查无有效属主的文件,即文件的属主在/etc/passwd中不存
  • -ok<执行指令>:               此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令;
  • -path<范本样式>:             指定字符串作为寻找目录的范本样式;
  • -perm<权限数值>:             查找符合指定的权限数值的文件或目录;
  • -print:                      假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有“./”字符串;
  • -print0:                     假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行;
  • -printf<输出格式>:           假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定;
  • -prune:                      #忽略某个目录
  • -regex<范本样式>:            指定字符串作为寻找文件或目录的范本样式;
  • -size      n[c]               #查长度为n块[或n字节]的文件
  • -true:                       将find指令的回传值皆设为True;
  • --type b/d/c/p/l/f            #查是块设备、目录、字符设备、管道、符号链接、普通文件
  • -uid<用户识别码>:            查找符合指定的用户识别码的文件或目录;
  • -used<日数>:                 查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算;
  • -user<拥有者名称>:           查找符和指定的拥有者名称的文件或目录;
  • -version或——version:       显示版本信息;
  • -xdev:                       将范围局限在先行的文件系统中;
  • -xtype<文件类型>:            此参数的效果和指定“-type”参数类似,差别在于它针对符号连接检查。

后续操作

  -exec:对匹配的文件执行该参数所给出的shell命令,形式为:command {} \,({}和\,之间有空格)。

  -ok:与exec作用相同,区别是在执行命令之前,都会给用户提示,让用户确认是否执行

  注意: 
  1)”{}”和”\”之间有一个空格。 
  2)-ok:和-exec的作用相同,只不过-ok更加安全一点,在执行每一个命令之前,系统会让用户确定是否执行。

逻辑运算

  • -a:and逻辑与。find 命令也支持逻辑运算符选项,其中 -a 代表逻辑与运算,也就是 -a 的两个条件都成立,find 搜索的结果才成立。
  • -o:or逻辑或。就是 -o 的两个条件只要其中一个成立,find 命令就可以找到结果。
  • -not:not逻辑非。就是取反的意思。

基本使用

根据文件名查找

  • 在根目录下查找test开头的文件,文件名区分大小写

  命令:find / -name ‘test*.txt’

  • 在/var/xiaoming目录下查找test1.txt,test2.txt,test3.txt,文件名区分大小写

  命令:find /var/xiaoming -name 'test[123].txt'

  • 在/var/xiaoming目录下查找test1.txt,test2.txt,TEST3.txt,Test4.txt,文件名不区分大小写。?表示任意单个字符

  命令:find /var/xiaoming -iname 'test?.txt'

根据文件类型查找

  -type 为类型参数:
  f 表示文件
  d 表示目录
  c 表示字符设备
  b 表示块设备
  s 表示套接字
  l 表示链接

  • 在根目录下查找名为test的文件夹

  命令:find / -type d -name 'test'

根据文件大小查找

文件大小参数:

  b —— 块(512字节)
  c —— 字节
  w —— 字(2字节)
  k —— 千字节
  M —— 兆字节
  G —— 吉字节

说明:命令中的'+’,’-’,’=’分别表示大于,小于和等于,注意如果不加符号就表示要找文件的大小必须恰好等于这个值才符合条件

  • 在/var/xiaoming目录下查找文件大小在10kb和500kb之间的文件

  命令:find /var/xiaoming -type f -size +10k

根据时间查找

  UNIX/Linux文件系统每个文件都有三种时间戳:

  • 访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。
  • 修改时间(数据修改时间)(-mtime/天,-mmin/分钟):文件最后一次修改时间。
  • 变化时间(状态修改时间)(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。

  注意:“+”:表示多长时间前被操作过的文件;“-”:表示多长时间内被操作过的文件;没有符号表示等于这个时间点被操作过的文件

  • 查找根目录下10分钟之前30分钟之内数据被修改过的文件

  命令:find / -mmin +10 -mmin -30

  • 查找根目录下5天前10天内文件属性修改过的文件

  命令:find / -ctime +5 -ctime -10

  • 查找根目录下5天内被访问过的文件

  命令:find / -type f -atime -5

根据用户/组来查找

  选项:

  • -uid 用户 ID:按照用户 ID 査找所有者是指定 ID 的文件
  • -gid 组 ID:按照用户组 ID 査找所属组是指定 ID 的文件
  • -user 用户名:按照用户名査找所有者是指定用户的文件
  • -group 组名:按照组名査找所属组是指定用户组的文件
  • -nouser:査找没有所有者的文件
  • 查找当前目录下所有的所有者为root的文件

  命令:find . -user root

  • 查找当前目录下没有所有者的文件

  命令:find . -nouser

  • 在根目录下查找文件用户组名事root的文件

  命令:find  ./ -group root

maxdepth和mindepth 

  -maxdepth n : 搜索深度距离当前目录最多n个子目录深度

  -mindepth n :搜索深度距离当前目录至少n个子目录深度

  • 搜索出深度距离当前目录至少2个子目录的所有文件

  命令:find . -maxdepth 2 -type f  

  • 搜索出深度距离当前目录至少3个子目录的名称为test1.txt的文件

  命令:find . -mindepth 3 -type f -name 'test2.txt'

查找空目录

  • 查找当前目录下空文件

  命令:find . -empty

根据权限来查找

  选项:

  • -perm 权限模式:査找文件权限刚好等于"权限模式"的文件
  • -perm -权限模式:査找文件权限全部包含"权限模式"的文件
  • -perm +权限模式:査找文件权限包含"权限模式"的任意一个权限的文件

  

  • 在/var/kuangxiang目录下查找权限为444的文件

    命令:find /var/kuangxiang -type f  -perm -444

  • 找出当前目录下权限不是644的php文件

   命令:find . -type f -name "*.php" ! -perm 644

按照硬连接的数目进行查找

  -link n :硬连接连接数等于n的文件或目录 ;-link +n:硬连接连接数大于n的文件或目录;-link -n:硬连接连接数小于n的文件或目录

  • 查找根目录下硬连接数为3的文件

  命令:find / -link 3

逻辑运算查找

  -a:与运算

  • 查找当前目录下txt结尾喝php结尾且权限为644的文件

  命令:find -type f -name '*.txt' -a -name '*.php' -a -perm 644

  -o:或运算

  • 查找当前目录下名为test1.txt文件或者名为test2的文件夹

  命令:find . -type f -name 'test1.txt' -o -type d -name 'test2'

  -not:对条件进行取反

  • 查找当前目录下文件大小不等于0的文件

  命令:find . -not -size 0

其他操作

  • 查找当前目录下的空文件并删除。其中,”{}”就代表查找之后返回的文件,{}和\之间必须有空格,且最后必须有分号

  命令:find . -empty -exec rm -f {} \;

  • 查找当前目录下的名称为test1.txt的文件并且展示文件相关属性

  命令:find .-name 'test1.txt' -exec ls -l {} \;

  • 查找当前所有以 abc 开头并且不含 .php 扩展名的文件

  命令:find . -name 'abc*' ! -name '*.php'

  • 在/var/xiaoming和/var/zhangsan目录下查询名为test.txt的文件

  命令:find /var/xiaoming /var/zhangsan -type f -name 'test.txt'

  • 在当前目录下查找隐藏文件、

  命令:find  . -type f -name ".*"

  • 在/etc下查找只读文件

  命令:find /etc -maxdepth 1 -perm /u=r

  • 在/bin目录下查找可执行文件

  命令:find /bin -maxdepth 2 -perm /a=x

  • 查找最大和最小的文件

  我们可以将 find 命令与 ls 和 sort命令结合,从而找出最大或最小的文件。下面的命令使用了 sort 命令的 -r 选项,也就是从大到小降序排列。经过 head 命令的过滤之后,会显示当前目录和子目录下最大的5个文件。命令的执行过程需要一段时间,查找的速度取决于文件的总数,如下:

    命令:find . -type f -exec ls -s {} \; | sort -n -r | head 5

  同样,我们可以去掉 sort 命令的 -r 选项来进行升序排列,从而显示出最小的5个文件,如下:

  命令:find . -type f -exec ls -s {} \; | sort -n | head 5

  • 查找根目录下以log结尾以外的文件

  命令:find ./ ! -name "*.log"

  • 查找比某文件新或某文件旧的文件

  环境上日志文件太多,想删除某个时间之前的文件,该怎么处理?

  可以利用以下参数:

  • newer 修改时间更新的
  • anewer 访问时间更新的
  • ctime 修改时间更新的,包括属性的修改

  命令:find ./ ! -newer 1.log |xargs ls -al #列出比1.log更旧的文件
     find ./  -newer 1.log |xargs ls -al #列出比1.log更新的文件

  这里我只是列出,并没有删除,删除可参考前面介绍的删除找到的文件。而如果要查找出比文件1更新,比文件2旧的文件,只需要利用组合条件即可。

find与xargs

  在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。

  在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;
而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。
来看看xargs命令是如何同find命令一起使用的,并给出一些例子。
  find . -type f -print | xargs file 查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件
  find / -name "core" -print | xargs echo "" >/tmp/core.log 在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中:
  find . -type f -print | xargs grep "hostname" 用grep命令在所有的普通文件中搜索hostname这个词

  find /etc -type f "*.*" | xargs grep "TMOUT" 从etc目录下的任何文件中搜索包含有TMOUT字符的文件
  find ./ -mtime +3 -print|xargs rm -f –r 删除3天以前的所有东西(find . -ctime +3 -exec rm -rf {} \;)
  find ./ -size 0 | xargs rm -f & 删除文件大小为零的文件
  find命令配合使用exec和xargs可以使用户对所匹配到的文件执行几乎所有的命令。

学习链接

  find的参数介绍和基本使用

  Linux学习

  linux之find35个常用命令

linux之find的使用的更多相关文章

  1. Linux 驱动开发

    linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...

  2. Linux 内核概述 - Linux Kernel

    Linux 内核学习笔记整理. Unix unix 已有40历史,但计算机科学家仍认为其是现存操作系统中最大和最优秀的系统,它已成为一种传奇的存在,历经时间的考验却依然声名不坠. 1973 年,在用 ...

  3. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

  4. NodeJs在Linux下使用的各种问题

    环境:ubuntu16.04 ubuntu中安装NodeJs 通过apt-get命令安装后发现只能使用nodejs,而没有node命令 如果想避免这种情况请看下面连接的这种安装方式: 拓展见:Linu ...

  5. [linux]阿里云主机的免登陆安全SSH配置与思考

    公司服务器使用的第三方云端服务,即阿里云,而本地需要经常去登录到服务器做相应的配置工作,鉴于此,每次登录都要使用密码是比较烦躁的,本着极速思想,我们需要配置我们的免登陆. 一 理论概述 SSH介绍 S ...

  6. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...

  7. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 1.实施前准备工作 1.1 服务器安装操 ...

  8. SQL Server on Linux 理由浅析

    SQL Server on Linux 理由浅析 今天的爆炸性新闻<SQL Server on Linux>基本上在各大科技媒体上刷屏了 大家看到这个新闻都觉得非常震精,而美股,今天微软开 ...

  9. Microsoft Loves Linux

    微软新任CEO纳德拉提出的“Microsoft Loves Linux”,并且微软宣布.NET框架的开源,近期Microsoft不但宣布了Linux平台的SQL Server,还宣布了Microsof ...

  10. Linux 江湖系列阶段性总结

    引言 我使用 Linux 已经有很多年了,最开始接触 Linux 的时候是从 RedHat 9(没有 Enterprise),中途换过 N 个不同的发行版.多年前,我在 BlogJava 上面分享 J ...

随机推荐

  1. react组件中返回并列元素的方法

    我们在写react组件的时候,经常会遇到这种问题,在render中return元素只能有一个顶级元素,比如div,假如写成这样就会报错: render(){ return( <div>12 ...

  2. 请解释一下 JavaScript 的同源策略

    概念: 同源策略是客户端脚本(尤其是Netscape Navigator2.0,其目的是防止某个文档或脚本从多个不同源装载. 这里的同源策略指的是:协议,域名,端口相同,同源策略是一种安全协议. 指一 ...

  3. Linux内存使用情况以及内存泄露情况

    1. 内存使用情况分析 http://www.360doc.com/content/15/1118/13/17283_514054063.shtml https://www.linuxidc.com/ ...

  4. 如何十倍提高你的webpack构建效率

    前言 http://jafeney.com/2016/07/10/2016-07-10-webpack/     webpack 是个好东西,和 NPM 搭配起来使用管理模块实在非常方便.而 Babe ...

  5. bootargs中的rootwait 与rootdelay有什么区别?

    答: rootwait是无限期等待,而rootdelay可以指定等待的时间,更加灵活.

  6. CV1——学习笔记

    计算机视觉(computer vision)是从图像和视频中提出数值或符号信息的计算系统,更形象一点说,计算机视觉是让计算机具备像人类一样的眼睛,看到图像,并理解图像. 计算机视觉三大应用:识别.检测 ...

  7. 常用sql2

    mysql中的NULL的判断    mysql> delete from `zhangchao` where x='NULL'; Query OK, 0 rows affected (0.00 ...

  8. PAT 甲级 1048 Find Coins (25 分)(较简单,开个数组记录一下即可)

    1048 Find Coins (25 分)   Eva loves to collect coins from all over the universe, including some other ...

  9. LeetCode_160. Intersection of Two Linked Lists

    160. Intersection of Two Linked Lists Easy Write a program to find the node at which the intersectio ...

  10. MySQL复制表结构

    示例SQL: create table testdb.test_table_back like testdb.test_table