[Linux服务器] Linux find命令

1586 0
Honkers 2025-3-23 00:34:31 | 显示全部楼层 |阅读模式

参考资料

  1. 菜鸟教程-Linux find 命令
  2. Linux 中使用 find 命令查找文件
  3. linux find命令详解 💪
  4. findコマンドの使い方を簡単に理解するための7つのルール+実践的な知識


一. 基本语法

  1. find 指定目录 寻找条件 查完后执行的动作
复制代码

1.1 配置项

配置项(简写)说明
-name按照文件名查找文件,不忽略大小写
-iname按照文件名查找文件,忽略大小写
-type按照文件类型查找文件
-size按照文件大小查找
-perm按照权限查找
-user按照用户名查找

⏹-type配置项的描述符

  • d:文件夹
  • f:普通文件
  • l:链接文件

⏹-size配置项的描述符

  • c:字节
  • k:KB
  • M:MB
  • G:GB

1.2 常用动作

动作说明
-exec 命令体 {} ;对符合条件的文件执行所给的Linux 命令,而不询问用户是否需要执行该命令
命令的末尾必须以\;结束
-ls详细列出所找到的所有文件
-print在标准输出设备上显示查找出的文件名
xrags

二. -name 按照文件名查找

2.1 按照文件名正则表达式查找

⏹当查找后缀名为.sh的文件时,需要使用双引号包裹,否则查询无效

  1. # 在当前目录的 jmw_work_space 文件夹下查找 后缀为 .sh 的文件
  2. find ./jmw_work_space/ -name "*.sh"
  3. find ./jmw_work_space/ -name *.zip
复制代码


⏹指定正则表达式

  1. find ./jmw_work_space/ -name "20240[0-9]*.txt"
复制代码

2.2 逻辑运算符

2.2.1 与 查找

⏹查找文件名后缀为.sh 并且 所属用户为 root 的文件

  1. find ./jmw_work_space/ -name "*.sh" -user root
复制代码

2.2.2 或 查找

⏹查找后缀名为.sh的文件 文件名包含out的zip文件

  • -o:表示或
  1. find ./jmw_work_space/ -name "*.sh" -o -name "out*.zip"
复制代码

2.2.3 非 查找

⏹查找指定目录下 名称不包含address的文件,因为还使用了-type f,所以不会匹配到文件夹

  • !:取反
  1. find ./jmw_work_space/20240127 ! -name "address*.txt" -type f
复制代码


三. -path 通过路径和文件名查找

  • 如果想要在指定目录下,搜索某目录中的某文件,应该使用-path而不是-name
  1. apluser@ubuntu24-01:~$ ls -ld work/{T,W}*
  2. drwxrwxr-x 2 apluser apluser 4096 Dec 29 00:07 work/T0_0_d
  3. drwxrwxr-x 2 apluser apluser 4096 Dec 29 00:07 work/T0_1_d
  4. drwxrwxr-x 2 apluser apluser 4096 Dec 29 00:07 work/T0_2_d
  5. drwxrwxr-x 2 apluser apluser 4096 Dec 29 00:07 work/T0_3_d
  6. drwxrwxr-x 2 apluser apluser 4096 Dec 29 00:07 work/T0_4_d
  7. drwxrwxr-x 2 apluser apluser 4096 Dec 29 00:07 work/W0_0_d
  8. drwxrwxr-x 2 apluser apluser 4096 Dec 29 00:07 work/W0_1_d
  9. drwxrwxr-x 2 apluser apluser 4096 Dec 29 00:07 work/W0_2_d
  10. drwxrwxr-x 2 apluser apluser 4096 Dec 29 00:07 work/W0_3_d
  11. drwxrwxr-x 2 apluser apluser 4096 Dec 29 00:07 work/W0_4_d
  12. apluser@ubuntu24-01:~$
  13. apluser@ubuntu24-01:~$ find work -path "*T*/a.txt"
  14. work/T0_2_d/a.txt
  15. work/T0_3_d/a.txt
  16. work/T0_1_d/a.txt
  17. work/T0_4_d/a.txt
  18. work/T0_0_d/a.txt
  19. apluser@ubuntu24-01:~$
  20. apluser@ubuntu24-01:~$ find work -path "*2*/a.txt"
  21. work/T0_2_d/a.txt
  22. work/W0_2_d/a.txt
复制代码

四. -type 按照类型查找

4.1 查找文件夹路径

  • d:表示查找文件夹
  1. # 查找指定目录下的指定文件夹路径
  2. find ./jmw_work_space/ -name "2024*" -type d
复制代码

4.2 查找文件路径

  • f:表示查找文件,而不是文件夹
  1. find ./jmw_work_space/ -name "2024*" -type f
复制代码


五. -size 按照文件大小查找

5.1 查找等于指定大小的文件/目录

  • -size 0k:查找大小为0k的文件/目录
  1. find ./jmw_work_space/ -size 0k -ls
复制代码

5.2 查找大于指定大小的文件/目录

  • -size +2M:查找 > 2M 的文件/目录
  1. find ./jmw_work_space/ -size +2M | xargs ls -l
复制代码

5.3 查找小于指定大小的文件/目录

  • -size -2k:查找 < 2k 的文件/目录
  1. find ./jmw_work_space/ -size -2k
复制代码

5.4 查找大小在指定范围之内的文件

  • -size +2k -size -10M:2k < 大小 < 10M
  • 这样会查询出文件夹
  1. find ./jmw_work_space/ -size +2k -size -10M
复制代码

  • ⏹加上-type f,限定只查询文件
  1. find ./jmw_work_space/ -size +2k -size -10M -type f
复制代码

  • ⏹查询指定大小的文件,并且限定文件名
  1. find ./jmw_work_space/ -size +2k -size -10M -name "*.png"
复制代码


六. -mtime 按照时间查找

6.1 查找90天之前的文件

  1. find /nas/if_data/DIO001/ -type f -mtime + 90
复制代码

6.2 查找90天之前的文件并删除

  • 使用 -exec
  1. # 使用 -exec 效率不高
  2. find /nas/if_data/DIO001/ -type f -mtime + 90 -exec rm {} \;
复制代码
  • 使用 xargs 会将文件名分批传递给 rm,减少了创建子进程的开销,提高了效率。
  1. # 先输出 rm 命令和文件名列表,确认无误后再去掉 echo 执行实际删除操作。
  2. find /nas/if_data/DIO001/ -type f -mtime +90 -print0 | xargs -0 echo rm
  3. # 直接执行删除命令
  4. find /nas/if_data/DIO001/ -type f -mtime +90 -print0 | xargs -0 rm
复制代码

七. 查找时,仅显示文件名,不显示路径

  • basename:仅显示文件名称,不显示路径
  1. apluser@ubuntu24-01:~$ find . -name "*.properties" -exec basename {} \;
  2. apluser@ubuntu24-01:~$ find . -name "*.properties" | xargs -I {} basename {}
  3. maven-wrapper.properties
  4. common.properties
  5. messages_ja.properties
  6. messages_zh.properties
  7. messages.properties
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行