Linux 中使用 find 命令查找文件

9,059 阅读4分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

find命令可以通过用户给定的表达式在指定目录下搜索文件,并执行指定的操作。

语法格式

find命令的一般语法如下:

find path options [-print -exec -ok ...]
  • path:所要查找的目录路径,例如"."表示当前目录,"/"表示根目录
  • -print:将匹配的文件输出到标准输出
  • -exec:对匹配的文件执行该参数所指定的shell命令
  • -ok:和-exec的作用相同,只不过更加安全一点,在执行每一个命令之前,系统会让用户确定是否执行

常用命令选项参数如下:

  • -name:按文件名查找文件
  • -type:按文件类型查找文件
  • -perm:按文件权限来查找文件
  • -prune:表示要忽略的目录
  • -depth:指定搜索顺序,从文件树的最子层目录查起
  • -user:查找属于指定用户名的所有文件
  • -group:查找属于指定用户组的所有文件
  • -size n:查找文件长度为n块的文件,默认每块512字节
  • -mtime -n/+n: 按照文件的更改时间来查找文件, -n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以前。
  • -atime:按照文件的访问时间来查找文件,使用与mtime相同。
  • -ctime: 按照文件的改变状态的时间来查找文件,使用与mtime相同。

按名称查找文件

通过名称查找文件是find命令最常见的用法,例如:要在/root目录下查找名为find_test.txt的文件,可以使用以下命令:

find /root -name find_test.txt

如果想要忽略大小写的搜索,-name选项更改为-iname即可:

find /root -iname FIND_test.txt

除此之外,find还支持使用通配符,例如:

find /root -name *_test.txt

使用比较常用的是按扩展名搜索文件,例如,要在/root目录下查找所有以.tar.gz结尾的文件:

find /root -name '*.tar.gz'

按类型查找文件

有时需要搜索特定文件类型的文件,比如普通文件,目录或符号链接等,可以使用-type选项和以下描述符之一来指定文件类型:

  • f:常规文件
  • d:目录
  • l:符号链接文件
  • c:字符设备文件
  • b:块设备文件
  • p:管道文件
  • s:套接字文件

例如,要在当前目录中查找所有目录:

find . -type d

按大小查找文件

按文件大小查找文件,可以使用-size选项,可以使用以下后缀来指定文件大小:

  • b:512字节块(默认)
  • c:字节
  • K:千字节
  • M:兆字节
  • G:千兆字节

以下命令将在/root目录下找到所有1024个字节的文件:

find /root -size 1024c

find命令还支持搜索大于或小于指定大小的文件,例如,在/root目录下搜索所有小于1MB的文件,需要使用-符号:

find /root -size -1M

搜索大于1MB的文件,则需要使用+符号:

find /root -size +1M

甚至可以搜索大小范围内的文件,例如,查找大小在1MB2MB之间的文件:

find /root -size +1M -size 2M

按权限查找文件

-perm选项可以按照文件权限搜索文件,例如,要在/root目录中查找权限为775的文件:

find /root -perm 775

按所有者查找文件

要查找特定用户或组拥有的文件,可以使用-user-group选项。

例如,要搜索用户tigeriaf拥有的所有文件和目录,应运行:

find / -user tigeriaf

查找文件并执行指定操作

查找所有匹配的文件,并执行指定的命令,可以使用-exec或者-ok选项,上面已经说过-exec-ok的作用相同,只不过-ok更加安全一点,在执行每一个命令之前,系统会让用户确定是否执行。相应的格式为-exec/-ok command {} \;,"command"是要执行的命令,"{}"就是代替查到的文件。

例如,查找所有符合*test.txt的文件并删除它们:

find . -name *test.txt -exec rm {} \;

或者

find . -name *test.txt -ok rm {} \;

总结

这里只介绍了find命令部分比较常用的功能,还有很多强大的功能,想要了解更多的小伙伴可以自行了解一下。

原创不易,如果小伙伴们觉得有帮助,麻烦点个赞再走呗~

最后,感谢女朋友在工作和生活中的包容、理解与支持 !