📅  最后修改于: 2023-12-03 15:27:33.670000             🧑  作者: Mango
在 Shell-Bash 中,我们可以通过扩展递归查找文件。其中,递归指的是在子目录下查找,扩展指的是可以使用通配符进行匹配。
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 [option] pattern [file]
option
:选项,指定如何搜索及输出匹配行等。pattern
:要查找的内容。file
:指定搜索的文件,如果省略则从标准输入中读取。-i
:忽略大小写。-r
:递归查找。-n
:输出匹配行及对应行号。-v
:反向查找,输出不匹配行。-e pattern
或 -f file
:指定多个模式,可以通过 -e
指定,也可以准备一个文件,每行写一个模式,以 -f
指定。查找当前目录及其子目录下所有文件中包含 TODO
或 FIXME
的行:
grep -r -i -n -e "TODO" -e "FIXME" .
通过 find
命令和 grep
命令,我们可以很方便地在终端中查找文件、搜索内容,可以根据需要加上递归和通配符等功能,更高效地操作。