文件查找find,locate,命令传递参数xargs
2026/7/17 11:58:59 网站建设 项目流程

非实时查找(数据库查找):locate

locate特点:

  • 查找速度快
  • 模糊查找
  • 非实时查找
  • 搜索的是文件的全路径,不仅仅是文件名

locate用法

-i 不区分大小写的搜索
-n N 只列举前N个匹配项目
-r 使用基本正则表达式

搜索名称或路径中包含“conf"的文件
locate conf
#使用Regex来搜索以“.conf"结尾的文件
locate -r '\.conf$'

[root@centos8 ~]#touch test2.log [root@centos8 ~]#locate test2.log [root@centos8 ~]#updatedb #更新数据库 [root@centos8 ~]#locate test2.log /root/test2.log

实时查找:find

(1)find特点:

  • 查找速度略慢
  • 精确查找
  • 实时查找
  • 查找条件丰富
  • 可能只搜索用户具备读取和执行权限的目录
(2)查找指定路径下的所有文件和子目录(包括隐藏文件)

find /path/to/directory -name ".*"

这将列出路径下所有隐藏文件(以点号开头的文件)。

(3)按文件名查找

使用-name选项可以根据文件名进行查找。

find /path/to/directory -name "file.txt"

查找名为file.txt的文件。

支持通配符,可以使用*匹配多个字符,?匹配单个字符。例如:

find /path/to/directory -name "*.txt"

查找所有.txt后缀的文件。

(4)按文件类型查找

使用-type选项可以按文件类型查找。常见的文件类型有:

  • f:普通文件
  • d:目录
  • l:符号链接
  • c:字符设备文件
  • b:块设备文件

例如:

bash复制代码

find /path/to/directory -type f

查找指定目录下的所有普通文件。

find /path/to/directory -type d

查找指定目录下的所有目录。

(5)按文件大小查找

使用-size选项根据文件大小查找文件。可以使用:

  • c:字节(默认为字节)
  • k:千字节(KB)
  • M:兆字节(MB)
  • G:千兆字节(GB)

例如,查找大于 100MB 的文件:

find /path/to/directory -size +100M

查找小于 1KB 的文件:

find /path/to/directory -size -1k

(6)按文件修改时间查找

使用-mtime选项按修改时间查找文件。mtime的单位是天,支持以下格式:

  • +n:查找 n 天前修改的文件。
  • -n:查找 n 天内修改的文件。
  • n:查找正好在 n 天前修改的文件。

例如:

find /path/to/directory -mtime +7

查找 7 天前修改的文件。

(7)按文件权限查找

使用-perm选项按文件权限查找文件。例如,查找权限为755的文件:

find /path/to/directory -perm 755

查找权限为777的文件(即所有人都具有读、写、执行权限):

find /path/to/directory -perm 777

(8)按文件所有者或所属组查找

使用-user-group选项根据文件的所有者或所属组来查找文件。例如:

find /path/to/directory -user username

查找属于username用户的文件。

find /path/to/directory -group groupname

查找属于groupname组的文件。

(9)按文件内容查找

使用-exec选项可以执行其他命令来处理查找到的文件。例如,查找包含某个文本字符串的文件:

find /path/to/directory -type f -exec grep -l "search_string" {} \;

其中,{}表示find查找到的文件,\;用于结束-exec参数。

(10)查找并删除文件

使用-exec选项结合rm命令删除文件:

find /path/to/directory -type f -name "*.tmp" -exec rm -f {} \;

该命令会查找所有.tmp文件并删除它们。

或者使用-delete选项直接删除文件(不需要-exec):

find /path/to/directory -type f -name "*.log" -delete

该命令会删除所有.log文件。

3.组合条件

find命令支持多个条件的组合,使用-and(默认)或-or来组合条件,-not用来排除某些条件。

例如,查找最近 7 天内修改且大小大于 10MB 的文件:

find /path/to/directory -mtime -7 -size +10M

查找所有.txt.md文件:

find /path/to/directory \( -name "*.txt" -or -name "*.md" \)

注意\( \)是用来组合法条件的。

4.查找并统计文件数量

使用wc -l命令统计找到的文件数量:

find /path/to/directory -type f | wc -l

5.find命令与管道结合

find命令非常适合与其他命令(如grepxargs)结合使用。例如,查找包含特定字符串的文件并查看其内容:

find /path/to/directory -type f -exec grep -l "pattern" {} \;

或者,使用xargs将结果传递给其他命令:

find /path/to/directory -type f -name "*.log" | xargs cat

6.排除特定目录

使用-path-prune排除某些目录:

find /path/to/directory -path "/path/to/directory/exclude" -prune -o -name "*.txt" -print

该命令会查找.txt文件,但排除/path/to/directory/exclude目录中的文件。

xargs 给其他命令传递参数的一个过滤器

cat test.txt | xargs 多行输入单行输出: cat test.txt | xargs -n3 -n 选项 多行输出: a b c d e f g h i j k l echo "nameXnameXnameXname" | xargs -dX -d 选项 可以自定义一个定界符: name name name name #用 rm 删除太多的文件时候,可能得到一个错误信息:/bin/rm Argument list too long. 用 xargs 去避免这个问题: find . -type f -name "*.log" -print0 | xargs -0 rm -f #统计一个源代码目录中所有 php 文件的行数: find . -type f -name "*.php" -print0 | xargs -0 wc -l #查找所有的 jpg 文件,并且压缩它们: find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz #结合 -t 选项可以打印出 xargs 执行的命令 ls | xargs -t -I{} echo {} #-p 选项会在执行每一个命令时弹出确认,当你需要非常准确的确认每一次操作时可以使用 -p 参数,比##如,查找当前目录下 .log 文件,每一次删除都需要确认: find . -maxdepth 1 -name "*.log" | xargs -p -I{} rm {}

多行输入单行输出:

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询