find

find

find 命令的常见用法有哪些?find 命令的例子。

简介

Linux Find命令是类Unix操作系统中最重要、最常用的命令行实用程序之一。find 命令可以,根据不同的查找条件,来查询匹配不同的文件或目录列表。

find 可用于根据各种条件查找,例如您可以按权限、用户、组、文件类型、日期、大小和其他可能的条件查找文件。

通过本文,我们将以示例的形式分享我们的日常Linux find命令体验及其使用。

格式

find [path...] [test...] [action...]
  • pathfind 命令的第一件事,查看每个路径
  • test:对于遇到的每个文件,find 应用测试条件
  • action:一旦搜索完成,find 对每个文件执行相应的操作

路径示例

  • find /usr/bin
  • find /
  • find .
  • find ~

测试示例

  • -name pattern:包含 pattern 的文件名
  • -iname pattern:包含 pattern 的文件名(忽略大小写)
  • -type [df]:文件类型,d 代表目录,f 代表文件
  • -perm mode:设置为 mode 的文件权限
  • -user userid:用户为 userid
  • -group groupid:组为 groupid
  • -size [-+]n[cbkMG]:大小为 n[字符(字节)、块、千字节、兆字节、吉字节]
  • -empty:空文件
  • -amin [-+]n:n 分钟之前访问
  • -anewer file:file 文件之后访问
  • -atime [-+]n:n 天之前访问
  • -cmin [-+]n:n 分钟之前状态改变
  • -cnewer file:file 文件之后状态改变
  • -ctime [-+]n:n 天状态之前改变
  • -mmin [-+]n:n 分钟之前修改
  • -mtime [-+]n:n 天之前修改
  • -newer file:file 文件之后修改

- 代表:小于,+ 代表:大于

另外对于测试条件而言,可以使用 ! 对测试条件求反:

# 显示扩展名不是 jpg 的文件
find ~ -type f \! -name '*.jpg' -print

动作示例

  • -print:路径名写入到标准输出
  • -fprint file:同 -print,将输出写入到 file
  • -ls:显示长目录列表
  • -fls file:同 -ls,将输出写入到 file
  • -delete:删除文件
  • -exec command {} \;:执行 command{} 代表匹配的文件名
  • -ok command {} \;:同 -exec,但是在执行 command 之前进行确认

示例

(1)在当前目录查找文件全名为 ‘abc.txt’ 的文件

find . -name abc.txt

点 . 代表当前目录

/home 目录查找就是:

find /home -name abc.txt

(2)忽略文件名的大小写

find . -iname abc.txt

可能查找出来的有:abc.txtAbc.txt

(3)查找名称为 abc 的文件夹

find / -type d -name abc

-type 的值代表文件类型,可能的值如下所示:

  • b:block special
  • c:character special
  • d:目录
  • f:普通文件
  • l:symbolic link
  • p:FIFO
  • s:socket

(4)查找当前目录的所有 Java 文件

find . -type f -name '*.java'

(5)查找权限不是 777 的文件

find / -type f ! -perm 777

感叹号 ! 表示反匹配

(6)查找权限为 777 的文件,并改为 644 文件

find / -type f -perm 0777 -print -exec chmod 644 {} \;

-print 代表匹配的文件打印到命令行中

(7)查找文件并将其删除

find . -type f -name '*.txt' -exec rm -f {} \;

(8)查找所有空文件

find /tmp -type f -empty

(9)查找所有隐藏文件

find /tmp -type f -name '.*'

(10)查找 abc.txt 并且是用户 tom 拥有的文件

find / -user tom -name abc.txt

(11)查找所有过去 50 天内修改过的文件

find / -mtime 50

(12)查找所有过去 50 - 100 天内修改过的文件

find / -mtime +50 -mtime -100

(13)查找所有过去 50 天内访问过的文件

find / -atime 50

(14)找到过去 1 小时之内修改过的文件

find / -cmin -60
  • -cmin 代表 change 的文件(单位:分钟)
  • -mmin 代表 modified 的文件(单位:分钟)
  • -amin 代表 assessed 的文件(单位:分钟)

(15)找到 50MB 大小的文件

find . -size 50M

(16)找到文件位于 50MB - 100MB

find . -size +50M -size -100M

exec 命令简介

上述有几个例子,在搜索到指定文件后,使用 exec 命令对这些文件做了一些其它操作:比如删除、修改权限等操作。以下面命令为例:

find . -type f -name '*.txt' -exec rm -f '{}' \;
  • exec 命令,可以对与 find 表达式匹配的每个对象执行命令
  • {}find 搜索到的文件的占位符
  • exec 命令以 ; 结束,但是呢需要使用 \ 来对其进行转义,以防止 ; 被转义
  • {} 最好使用单引号括起来:'{}',以避免由于文件的名字格式等问题出现错误

参考

扫描下面二维码,在手机端阅读: