查找文件命令find和文件内容查找命令grep

find命令

在 Linux 命令中,find用于在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名,其支持按名称查找、按正则表达式查找、按文件大小查找、按文件权限查找等多种查询方式。如果在使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部进行显示。

语法:find + 目标目录(路径) + <选项> + 参数

常用选项列表和含义:

-perm <权限数值>    查找符合指定的权限数值的文件或目录
-type <文件类型>    只寻找符合指定的文件类型的文件
-name <范本样式>    指定字符串作为寻找文件或目录的范本样式
-expty    寻找文件大小为 0 Byte 的文件,或目录下没有任何子目录或文件的空目录
-ls    假设find指令的回传值为ture,就将文件或目录名称列出到标准输出
-maxdepth <目录层级>    设置最大目录层级
-mindepth <目录层级>    设置最小目录层级
-exec <执行指令>    假设find指令的回传值为true,就执行该指令
-ok <执行指令>    此参数的效果和指定-exec类似,但在执行指令之前会先询问用户,若回答y或Y,则放弃执行命令

# 查找当前目录及其子目录下所有文件和文件夹
find .  

# 在/testLinux目录下查找以.txt结尾的文件名                               
find /tmp/cg/testLinux -name "*.txt"    

# 组合查找文件名以file1开头(与、或、非)file2开头的文件
find . -name "file1*" -a -name "file2*"      # 与and
find . -name "file1*" -o -name "file2*"      # 或or
find . -name "file1*" -not -name "file2*"    # 非not
find . -name "file1*" ! -name "file2*"       # 非not

# 根据文件类型进行搜索
find . -type f     # f为普通文件,d为目录,l为链接

# 基于目录深度进行搜索
find . -maxdepth 2 -type f   # 最大深度为2的文件

# 基于文件权限进行搜索
find . -type f -name "*.txt" ! -perm 777    # 权限为777的以.txt结尾的文件

# 借助-exec命令,将当前目录及子目录下所有.txt格式的文件以File:文件名的形式打印出来
find . -type f -name "*.txt" -exec printf "File: %s\n" {} \;

# 借助-exec命令,将当前目录及子目录下所有 3 天前的.txt格式的文件复制一份到old目录
find . -type f -mtime +3 -name "*.txt" -exec cp {} old \;

grep命令

命令行下常用于查找过滤文本文件内容的命令。grep 指令用于查找文件中包含指定的范本样式的文本内容,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。

# 语法
grep [-abcEFGhHilLnqrsvVwxy][-A<显示行数>][-B<显示行数>][-C<显示行数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]

一些常用参数

  • -A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一行之外,并显示该行之后的内容。
  • -B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
  • -c 或 --count : 计算符合样式的列数。
  • -C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
  • -e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
  • -E 或 --extended-regexp : 将样式为延伸的正则表达式来使用。
  • -H 或 --with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称。
  • -i 或 --ignore-case : 忽略字符大小写的差别。
  • -L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称。
  • -n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的行数号。
  • -o 或 --only-matching : 只显示匹配PATTERN 部分。
  • -r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。
  • -v 或 --invert-match : 显示不包含匹配文本的所有行。
  • -V 或 --version : 显示版本信息。
  • -x --line-regexp : 只显示全列符合的列。
# 当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行
grep test *file 

# 以递归的方式查找符合条件的文件。例如,查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件
grep -r update /etc/acpi 

# 反向查找,通过"-v"参数可以打印出不符合条件行的内容。查找文件名中包含 test 的文件中不包含test 的行
grep -v test *test*

# 查询含有特定文本的文件,并拿到这些文本所在的行
grep -n '2019-10-24 00:01:11' *.log

# 查找匹配的总行数
grep -c "被查找的字符串" 文件名

# 从文件内容查找与正则表达式匹配的行
grep –e "正则表达式" 文件名

# 查找时不区分大小写
grep –i "被查找的字符串" 文件名

# 从文件内容查找不匹配指定字符串的行
grep –v "被查找的字符串" 文件名

find与grep结合

# 从根目录开始查找所有扩展名为 .log 的文本文件,并找出包含 "ERROR" 的行
find / -type f -name "*.log" | xargs grep "ERROR"

# 从当前目录开始查找所有扩展名为 .in 的文本文件,并找出包含 "thermcontact" 的行
find . -name "*.in" | xargs grep "thermcontact"

  • 6
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值