本文转自:迷途花开

另一值得参考的是吴秦先生的博文linux中强大且常用命令:find、grep

find命令用于查找文件和目录,任何位于参数之前的字符串都将被视为欲查找的目录。

find 可以指定查找条件如名称,类型,时间,文件大小,权限和所有者查找,针对多个条件进行与或非的逻辑运算。我们可以控制find的查找的行为,还可以和其他命令组合使用。

find、find .、find . –print三者等效。

查找非当前目录时,列出要查找的目录。如:find /usr/lib -name readme.txt

1. 指定查找条件

1.1按名称查找

find . -name readme.txt
查找当前目录下(递归子目录)的所有名为readme.txt的文件

find . -name
\*.txt

find . -name
“*.txt”

查找当前目录下(递归子目录)的所有名称以.txt结尾的文件,注意*号的写法,需要前面加\或者放到双引号中

find . -iname
\*.txt

默认find是区分大小写的,如果不想区分大小写,请使用-iname替代-name,如上则”abc.TXT”将被查找到

1.2 按类型查找

find . -type f
查找当前目录下(递归子目录)的所有文件

find . -type d
查找当前目录下(递归子目录)的所有目录

find . -type l
查找当前目录下(递归子目录)的所有符号链接

1.3 按时间查找

1.3.1 以小时为单位的时间

find 命令三个选项用于按照时间查找,单位都是小时:

mtime — 文件内容上次修改时间

atime — 文件被读取或访问的时间

ctime — 文件状态变化时间

这三个选项都需要配置一个n值使用,可以是-n / n / +n:
-n   小于 n

n    正好与 n 相等

+n  大于 n

find . -mtime -1

查找当前目录下(递归子目录)的所有1小时内修改的文件和目录
find . -mtime +1

查找当前目录下(递归子目录)的所有修改时间超过1小时的文件和目录
find . -mtime 1

查找当前目录下(递归子目录)的所有恰好在1小时前修改的文件和目录

1.3.2 以分钟为单位的时间

用法和*time类似,mminamincmin 的不同在于单位时间是分钟,用于查找在不到1小时的时间内变化了的文件和目录

find . -mmin -10
查找当前目录下(递归子目录)的所有10分钟内修改的文件和目录

find . -mmin +20
查找当前目录下(递归子目录)的所有20分钟外1小时内修改的文件和目录

1.3.3与特定的文件比较

-newer,-anewer和-cnewer选项用于查找与特定的文件比较的已修改或访问过的文件,类似mtime,atime和ctime

-newer 指内容最近被修改的文件

-anewer 指最近被读取过的文件

-cnewer 指状态最近发生变化的文件

find . -newer
a.txt

查找当前目录下(递归子目录)的所有修改时间在a.txt之后(所以文件更新)的文件和目录

1.4 按文件大小查找

1.4.1 -size

选项用于查找满足指定的大小条件的文件(注意不查找目录), +表示大于, -表示小于, 没有+1表示正好等于。文件大小的单位可以是字节(用c表示), kb(用k表示)。

find . -size
-100c

查找当前目录下(递归子目录)的所有文件大小小于100字节的文件

find . -size
+100k

查找当前目录下(递归子目录)的所有文件大小大于100k的文件

find . -size 0

查找当前目录下(递归子目录)的所有文件大小为0的文件

1.4.2 -empty

查找空文件和空文件夹, 和-size 0不同的在于-size 0 只查找空文件,或者说-empty -type f 等同于-size 0 :

find . –empty

查找当前目录下(递归子目录)的所有文件大小为0的文件和空文件夹

find . -empty
-type f

查找当前目录下(递归子目录)的所有文件大小为0的文件

find . -empty
-type d

查找当前目录下(递归子目录)的所有空目录

1.5 按权限和所有者查找

find . -perm 777

查找当前目录下(递归子目录)的所有权限为777的文件和目录

find . -perm
-u=rwx

查找当前目录下(递归子目录)的所有user权限为rwx的文件和目录

find . -perm
-ug=x

查找当前目录下(递归子目录)的所有user和group权限为x的文件和目录

find . -user sky

查找当前目录下(递归子目录)的所有user为sky的文件和目录

find . -group
users

查找当前目录下(递归子目录)的所有group为users的文件和目录

2. 查找条件的逻辑运算

2.1 逻辑与

find . -name
“*.java” -size -mmin -10

find . -name
“*.java” -a -size -mmin -10

查找当前目录下(递归子目录)的所有名为*.java并且修改时间在10分钟之内的文件,-a是默认选项

2.2 逻辑或

find . -name
“*.class” -o -name “*.jar”

查找当前目录下(递归子目录)的所有名为*.class或者*.jar的文件和目录

2.3 逻辑非

find . ! -user
sky

查找当前目录下(递归子目录)的所有user不是sky的文件和目录

3. 控制查找的行为

find . -maxdepth
3 -name “*.txt”

查找当前目录下(递归子目录)的所有名为*.txt的文件,目录深度不超过3层

find . -maxdepth
1 -name “*.txt”

查找当前目录下(不递归子目录,因为maxdepth为1)的所有名为*.txt的文件

find . -mindepth
3 -name “*.txt”

查找当前目录下(递归子目录)的所有名为*.txt的文件,目录深度不低于3层

find . -mindepth
1 -name “*.txt”

查找当前目录下的子目录中(递归子目录)的所有名为*.txt的文件,不包含当前目录

find . -depth
-name “*.txt”

查找当前目录下(递归子目录)的所有名为*.txt的文件,每个目录都是先在目录中进行查找,然后才继续查找其子目录

4. find和其他命令的组合

find . -name
“*.jar” -exec ls -l {} \;

find . -name
“*.jar” –ls

查找当前目录下(递归子目录)的所有*.jar文件并使用ls -l列出详细信息

find . -name “*.java”
-exec grep HashMap {} \;

查找当前目录下(递归子目录)的所有的含有”HashMap”字样的*.java文件

find . -name
“*.sh” -exec mv {} backup \;

查找当前目录下(递归子目录)的所有的*.sh文件并移动到backup目录中

Linux中find的使用(转)的更多相关文章

  1. 在 Linux 中安装 Oracle JDK 8 以及 JVM 的类加载机制

    参考资料 该文中的内容来源于 Oracle 的官方文档 Java SE Tools Reference .Oracle 在 Java 方面的文档是非常完善的.对 Java 8 感兴趣的朋友,可以直接找 ...

  2. Linux中find常见用法示例

    ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; find命令的参数: pathname: find命 ...

  3. Linux中检索文件

    1 , Use locate command It is a fast way to find the files location, but if a file just created ,it w ...

  4. 如何在Linux中搭建禅道8.4.1(httpd+php+mysql)

    1.安装httpd 命令:yum install httpd 然后一路y即可 2.安装php 命令:yum install php   3.安装php-mysql 命令:yum install php ...

  5. Linux中的用户和用户组

      在Linux中,有三种用户: Root 用户:也称为超级用户,对系统拥有完全的控制权限.超级用户可以不受限制的运行任何命令.Root 用户可以看做是系统管理员. 系统用户:系统用户是Linux运行 ...

  6. linux中shell变量$#,$@,$0,$1,$2的含义解释

    linux中shell变量$#,$@,$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行 ...

  7. 在linux中设置静态ip地址

    在linux中设置静态ip地址1.在终端中输入:vi /etc/sysconfig/network-scripts/ifcfg-eth0 2.开始编辑,填写ip地址.子网掩码.网关.DNS等[root ...

  8. windows和linux中搭建python集成开发环境IDE——如何设置多个python环境

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

  9. linux 中部署ant编译的包中缺少问题

    今天遇到在window上部署ant编译的包,能运行正常,但部署在linux中出现跳不进jsp中,出现404问题,后来经过排查在jsp中<%@taglib prefix="c" ...

  10. 在Linux中运行Nancy应用程序

    最近在研究如何将.NET应用程序移植到非Windows操作系统中运行,逐渐会写一些文章出来.目前还没有太深的研究,所以这些文章大多主要是记录我的一些实验. 这篇文章记录了我如何利用NancyFx编写一 ...

随机推荐

  1. 这一次,VR离我们真的很近

           从高考作文开始       今年号称是VR元年,虽然目前VR还没能像手机一样走进千家万户,但关于VR设备的关讨论是层出不穷.而今年高考,浙江省的作文题就与VR相关.网上购物.视频聊天等在 ...

  2. 移动开发测试工具——Bugtags的集成

    移动开发测试工具--Bugtags 官网:https://bugtags.com/ 注册开发者账号 注册账号并激活邮箱,都会就不多做介绍了. 创建应用 创建完账号以后会提示添加应用,点击添加 添加应用 ...

  3. CentOS下将php和mysql命令加入到环境变量中的几种方法

    Linux CentOS配置LAPM环境时,为了方便,将php和mysql命令加到系统环境命令,下面我们记录几种在linux下将php和mysql加入到环境变量中的方法. 如果在没有添加到环境变量之前 ...

  4. NDK在windows下的开发环境搭建及开发过程

    在Android应用的开发工程中,不管是游戏还是普通应用,都时常会用到.so即动态链接库,关于.so是什么玩意儿,有什么好处,这个大家可以在网上查一下,本人不做过多解释..so本是linux下的文件类 ...

  5. Android简易实战教程--第十四话《模仿金山助手创建桌面Widget小部件》

    打开谷歌api,对widget小部件做如下说明: App Widgets are miniature application views that can be embedded in otherap ...

  6. C语言一个双向链表的实现

    首先编写头文件,头文件里做相关的定义和声明,DList.h内容如下: #ifndef DList_H #define DList_H typedef int Item; typedef struct ...

  7. 2.QT中使用资源文件,程序打包

     1 程序中使用资源文件 A  一个QT空项目 B  右击项目,添加新文件 添加后的效果是 C  右击main.prc,选择"添加现有项",找到要使用的资源文件.最终的效果是: ...

  8. 从Storm和Spark 学习流式实时分布式计算的设计

    0. 背景 最近我在做流式实时分布式计算系统的架构设计,而正好又要参加CSDN博文大赛的决赛.本来想就写Spark源码分析的文章吧.但是又想毕竟是决赛,要拿出一些自己的干货出来,仅仅是源码分析貌似分量 ...

  9. JAVA之旅(三十)——打印流PrintWriter,合并流,切割文件并且合并,对象的序列化Serializable,管道流,RandomAccessFile,IO其他类,字符编码

    JAVA之旅(三十)--打印流PrintWriter,合并流,切割文件并且合并,对象的序列化Serializable,管道流,RandomAccessFile,IO其他类,字符编码 三十篇了,又是一个 ...

  10. Hessian源码分析--HessianServlet

    Hessian可以通过Servlet来对外暴露服务,HessianServlet继承于HttpServlet,但这仅仅是一个外壳,使用web服务器来提供对外的Http请求,在web.xml中我们会进行 ...