📌  相关文章
📜  终端通过扩展递归查找文件 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:27:33.670000             🧑  作者: Mango

终端通过扩展递归查找文件 - Shell-Bash

在 Shell-Bash 中,我们可以通过扩展递归查找文件。其中,递归指的是在子目录下查找,扩展指的是可以使用通配符进行匹配。

使用 find 命令

find 命令可以用于按照指定的条件在文件系统中查找文件,并将符合条件的文件输出。它支持根据文件名、文件类型、文件大小、文件修改时间等条件进行查询,可以加上 -exec 选项执行其他命令。

语法
find [path] [option] [expression]
  • path:指定起始搜索目录,默认为当前目录。
  • option:选项,指定如何搜索及输出格式等。
  • expression:用于匹配文件的表达式。
常用选项
  • -name pattern:按照文件名查找。
  • -iname pattern:按照文件名查找,忽略大小写。
  • -type type:按照文件类型查找,type 可以为 f(文件)、d(目录)、l(符号链接)、s(套接字)、p(管道)、c(字符设备)、b(块设备)。
  • -size n[cwbkMG]:按照文件大小查找,n 表示大小,cwbkMG 表示单位,c 代表字节,w 代表2字节,b 代表512字节,k 代表1024字节(1KB),M 代表1MB,G 代表1GB。
  • -mtime n:按照文件修改时间查找,n 表示天数,如 -mtime +7 表示修改时间在7天前的文件。
  • -exec command {} +:执行 command 命令,{} 代表搜索到的文件名列表,+ 表示把多个文件名传递给一次命令执行。
实例

查找当前目录及子目录下所有以 .sh 后缀的文件:

find . -name "*.sh"

查找 /etc 目录下所有的 txt 文件:

find /etc -type f -name "*.txt"

查找 /tmp 目录下大于 10MB 的文件,并删除:

find /tmp -type f -size +10M -exec rm -f {} +
使用 grep 命令

grep 命令可以用于搜索指定文本或匹配指定的模式。一般用于在大量文件中查找某个关键字,或者根据正则表达式查找满足特定格式的文本串。

语法
grep [option] pattern [file]
  • option:选项,指定如何搜索及输出匹配行等。
  • pattern:要查找的内容。
  • file:指定搜索的文件,如果省略则从标准输入中读取。
常用选项
  • -i:忽略大小写。
  • -r:递归查找。
  • -n:输出匹配行及对应行号。
  • -v:反向查找,输出不匹配行。
  • -e pattern-f file:指定多个模式,可以通过 -e 指定,也可以准备一个文件,每行写一个模式,以 -f 指定。
实例

查找当前目录及其子目录下所有文件中包含 TODOFIXME 的行:

grep -r -i -n -e "TODO" -e "FIXME" .
总结

通过 find 命令和 grep 命令,我们可以很方便地在终端中查找文件、搜索内容,可以根据需要加上递归和通配符等功能,更高效地操作。