find
命令是 Linux 系统环境下的一个常用命令,用来在指定目录中查找符合要求的文件。find
命令提供了大量灵活的参数,不仅支持按文件后缀查找文件,还能以时间,文件大小,用户或用户组,权限等条件来查找文件或目录。
除了用以查找,find
命令还支持以 -exec
参数接后续命令的方式来对查找到的文件做后续处理。所以这也是一个十分强大且实用的 Linux 命令。今天这篇文章我将以案例的方式来总结一下它的常见用法。
按后缀查找文件
首先,让我们尝试解决一个最常见的需求,查找当前目录下指定后缀的文件有哪些。比如 js
后缀的文件:
find . -name \*.js
如果你不熟悉 Linux 的一些常见规则,这里就对这个命令简单解释一下:
find
: 自然是命令的名称。.
: 这个点是 Linux 的通用符号,代表当前目录。如果是两个点,表示上一级目录。-name
: 这是find
命令的参数,表示指明要按文件名称搜索。\*.js
: 这是一个过滤规则,表示任何以.js
结尾的文件名。前面的\
是一个转义符,让系统在执行命令时可以正常的把后面的*
号传递给find
命令。如果不习惯这种方式,还可以以"*.js"
的方式来代替。
不区分大小写查找
让我们继续。默认情况下,find
命令是按大小写来查找的。比如有这样两个文件,a.js
和 b.JS
,用上面的命令,是查找不到 b.JS
的。如果我们不想错过其中任何一个,就需要使用 -iname
参数:
find . -iname \*.js
按类型查找
按类型查找文件的参数为 -type
,让我们试试查找当前目录下所有的子目录:
find . -type d
最后的 d
是 -type
参数的类型名称,表示目录类型。这样就可以查找出当前目录下的所有子目录。如果要查找普通的文件,可以使用 f
类型名称。除此之外,-type
还有一个 l
的类型名称,表示链接类型的文件或目录。
按大小查找
-size
是按大小查找文件的参数。比如我们要查找当前目录下大于 10M 的文件,就可以这样使用:
find . -size +10000000
注意前面的 +
号,如果要查找小于 10M 的文件,可以把这个 +
号换成 -
号。
按时间查找
find
命令支持按三种类型的时间来查找文件,它们对应的参数和说明如下:
-atime
: 文件读取或者访问的时间。-mtime
: 文件修改的时间。-ctime
: 文件状态变化的时间。
我们同样用例子来演示一下它们的用法。先看看如何查找当前目录下最近一小时内修改过的文件:
find . -mtime -1
后面的 -1
是一个时间度量值,单位是小时。它可以是一个正值,比如 1
,它表示 1 小时前。还可以是 +1
,它表示一个多小时前。
如果把 -mtime
参数换成 -atime
,那就是按读取访问的时间来搜索。-ctime
类似。
查找结果的后续处理
对于查找到的文件,有时候还需要进行一些后续的处理。find
命令提供的 -exec
参数就可以用来解决这类问题。
比如把当前目录下所有 .log
后缀的日志文件删除掉。就可以这样来处理:
find . -name \*.log -exec rm {} \;
rm
是 Linux 系统的文件删除命令。通过这个例子可以看出,-exec
参数的用法就是在后面接其他相关功能的 Shell 命令来完成后续的文件处理。不过要注意后面两个特殊的字符,它们的解释如下:
{}
: 这是find
命令的占位符,表示查找到的文件路径。\;
: 这是-exec
参数的结束符,表示参数后续命令到这里就结束了。
关于 find
命令的使用格式和选项,可以参考下面这篇文章来深入了解和学习。
find
命令的用法和可用参数选项。