转载自:http://billie66.github.io/TLCL/book/zh/chap18.html
find 查找文件
【语法】 find path_name [path_name_tow ...] [options] expression
【命令说明】 find 递归遍历指定路径;
【参数说明】
-print 将符合条件的数据打印到标准输出(控制台);find命令默认不打印,不使用该参数,没有输出信息;
-name v_name 按指定文件名查找(\ 为转意符),支持通配符;
$ find . -name ”*.log” -print;
-iname v_name 按指定文件名(忽略字母大小写)查找(\ 为转意符),支持通配符;
-path v_path_name 按指定文件路径查找(\ 为转意符),支持通配符;
$ find . -path ”*/test/*.log” -print;
-regex 基于正则表达式来匹配文件路径;
-iregex 基于正则表达式(忽略大小写)来匹配文件路径;
-maxdepth n 指定搜索的最大深度;当前目录为1;
$ find . -name ”*.conf” -maxdepth 2 -print;
-mindepth m 指定搜索的最小深度;当前目录为1;
-atime +n|-n 根据访问时间(access time)查找;单位是天,’-n’表示小于n,’+n’表示大于n;
$ find . -type f -atime -7 -print; #查找7天内访问过的文件
-mtime +n|-n 根据修改时间(modify time)查找;单位是天,’-n’表示小于n,’+n’表示大于n;
-ctime +n|-n 根据变化时间(change time)查找;单位是天,’-n’表示小于n,’+n’表示大于n;
-amin +n|-n 根据访问时间(access minute)查找;单位是分钟,’-n’表示小于n,’+n’表示大于n;
$ find . -type f -amin -7 -print; #查找7分钟内访问过的文件
-mtime +n|-n 根据修改时间(modify minute)查找;单位是分钟,’-n’表示小于n,’+n’表示大于n;
-ctime +n|-n 根据变化时间(change minute)查找;单位是分钟,’-n’表示小于n,’+n’表示大于n;
-newer 指定用于比较时间戳的参考文件,查找比该文件新更新的所有文件;
-size -n|+n 根据文件大小查找;可选单位有:c(字节),k(KB),m(MB),g(GB);
$ find . -type f -size +2k; #查找大于2KB的文件;
-type <x> 根据文件类型查找; b(block,块文件),c(char,字符文件),d(dir,目录),l(link,符号链接),p(pipe,命名管道),f(file,文件);
-perm n 基于文件权限查找; n为8进制的三个数字;
$ find . -type f -perm 644 -print;
-delete 删除已经查选到的文件;
$ find . -type f -name ”*.log” -delete ; #删除当前目录下的所有的.log文件;
-prune 跳过指定的目录;
$ find . \( -name ”.git” -prune \) -o \( -type f -print \) ;#排除.git文件
! 查找不匹配
$ find /home/cookie ! -name ”*.log” -print
-o 或者,匹配多个条件;
$ find /home/cookie \( -name ”*.text” -o -name ”*.pdf” \) -print
- 并且
【注意】
-maxdepth 和 -mindepth 应该作为find的第三个参数出现,以实现最大搜索效率;
grep 从文件/标准输入流查找指定内容
【语法】 grep [options] pattern file_names
【语法】 command | grep [options] pattern
【说明】 默认的pattern可包含通配符;若指定文件为缺省,则使用标准输入;若使用正则表达式,则使用 -E 选项,或使用egrep命令;
【正则表达式符号说明】
. 匹配任意一个字符;
* 匹配0个或多个*前的字符;
^ 匹配行开头;
$ 匹配行结尾;
[] 匹配[]中的任意一个字符,[]中可用 - 表示范围;例如[a-z]表示字母a 至z 中的任意一个
\ 转意字符;
【选项说明】
-R,-r,--recursive 递归查找子目录下的文件;
$ grep ”text” . -R -n;
-i 字母不区分大小写;
-n 显示行号;
-v 显示所有不匹配的行;
-l 仅显示文件名;
-b 显示块号;
-c 仅显示各指定文件中匹配的总行数;(统计的是匹配的行数,而不是匹配的数量);
-h 不显示文件名;
-s 指定文件若不存在或不可读,不提示错误信息;
--color 重点标记匹配的单词;
$ grep server_port app.conf --color=auto
-E 使用正则表达式模式;
$ grep -E ”[a-z]+” ;#等价于 egrep ”[a-z]+”;
-e 指定多个匹配样式;
$ grep -e ”.pdf” -e ”.doc”;
--exclude 搜索时排除指定文件;
$ grep ”main()” . -r --exclude ”README”;
--exclude-dir 搜索时排除指定目录;
--exclude-from 搜索时排除指定文件列表(从文件读取);
$ grep ”main()” . -r --exclude-from ”file_list”;
--include 指定搜索的范围;
$ grep ”main()” . -r --include *.{c,cpp};
-A n 输出结果的同时,输出匹配结果之后的n行;
$ seq 10 | grep 5 -A 2;
-B n 输出结果的同时,输出匹配结果之前的n行;
$ seq 10 | grep 5 -B 2;
-C n 输出结果的同时,输出匹配结果之前的n行和之后的n行;
$ seq 10 | grep 5 -C 2;