Linux find 命令详解

栏目: Linux 发布时间:2022-02-09

Linux find 命令用来查找指定目录下的文件。 如果使用 find 命令时,不指定查找目录,则 find 命令将在当前目录下查找。

Linux find 语法

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

参数说明:

1)path:要查找的目录路径

2)print:表示将结果输出到标准输出

3)exec:对匹配的文件执行该参数所给出的 shell 命令 形式为 command {} ;,注意{}与 ; 之间有空格 ”{}“为占位符,“;“用来结束命令(command 命令可以接收多个参数,不知道要在哪里结束,所以需要指定结束位置)

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

-mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件

-mindepth 最小目录层级

-maxdepth 最大目录层级

-amin n : 在过去 n 分钟内被读取过

-anewer file : 比文件 file 更晚被读取过的文件

-atime n : 在过去 n 天内被读取过的文件

-mtime n : 在过去 n 天内被修改过的文件

-cmin n : 在过去 n 分钟内被修改过

-cnewer file :比文件 file 更新的文件

-ctime n : 在过去n天内被修改过的文件

-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name

-ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写

-name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写

-size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。

-type c : 文件类型是 c 的文件。

d: 目录

c: 字型装置文件

b: 区块装置文件

p: 具名贮列

f: 一般文件

l: 符号连结

s: socket

-pid n : process id 是 n 的文件

Linux find 实例

首先,让我们准备一些目录和文件用来演示 find 命令的用法,假设像下面这样:

$ tree
.
├── css
│   └── account
│       └── login.css
├── images
│   └── account
│       └── login
│           └── bg.png
└── js
    ├── libs
    │   └── jquery.js
    └── pages
        └── account
            └── login.js

10 directories, 3 files
  • 实例1

这里我们不指定查找目录路径,默认会查找当前目录下的子目录和文件。

$ find -name 'login*'
./css/account/login.css
./js/pages/account/login.js
./images/account/login
  • 实例2

我们指定在 ./images 目录下查找

$ find ./images -name 'login*'
./images/account/login
  • 实例3

看了上面 2 个实例,你可能不禁要问,如果我不想同时查找目录和文件,只想查找其中一种怎么操作?

答案很简单,我们可以通过 -type 参数来指定查找文件类型。

接着往下看。

使用 -type d 指定查找目录类型

$ find ./ -name 'login*' -type d
./images/account/login

使用 -type f 指定查找一般文件类型

$ find ./ -name 'login*' -type f
./css/account/login.css
./js/pages/account/login.js
  • 案例4

使用 mindepth 与 maxdepth 参数指定目录层级

# 只查找当前目录下(不含子目录)
$ find ./ -maxdepth 1 -name 'account*'
# 只查找二级目录/文件和三级目录/文件
$ find ./ -mindepth 2 -maxdepth 3 -name 'account*'
  • 案例5

通过指定 -mtime 参数来查找指定时间被修改过的文件。

# 查找 7 天以前的日志
find ~/logs/fe -mtime 7
# 删除 7 天以前的日志
find ~/logs/fe -mtime 7 -exec rm {} \;

使用 -ok 指定删除要进行二次确认

# 删除 7 天以前的日志,二次确认后才删除文件
find ~/logs/fe -mtime 7 -ok rm {} \;

还可以结合 xargs 命令来完成删除文件

# 删除 7 天以前的日志
find ~/logs/fe -mtime 7 | xargs rm
  • 案例6

通过指定 -size 参数来查找大于指定大小的文件

# 查找 /data 目录下大于 1000k 的文件
find /data -size +1000k

Linux find 命令小结

Linux find 命令主要用于文件或目录查找。

1、语法

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

2、不指定查找目录会默认查找当前目录(及其子目录)

3、通过 -type 参数指定查找文件类型(-type d 查找目录;-type f 查找一般文件)

4、通过 -mindepth 和 -maxdepth 参数指定查询目录的层级

5、通过 -mtime 参数指定查找文件的修改时间

6、通过 -size 参数指定查找文件大小

本文地址:https://www.tides.cn/p_linux-find