shell 中find 和 grep
find 是找符合某个条件的文件
find命令原理:从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件,并可以对其进行相关的操作。
格式:find [查找目录] [参数] [匹配模型]
多参数格式:find [查找目录] [参数] [匹配模型] [参数] [匹配模型]
例如:
1、find . -name "*.sh"
查找在当前目录(及子目录)下找以sh结尾的文件。
2、find . -perm 755
查找在当前目录(及子目录)下找属性为755的文件。
3、find -user root
查找在当前目录(及子目录)下找属主为root的文件。
4、find /var -mtime -5
查找在/var下找更改时间在5天以内的文件。
5、find /var -mtime +3
查找在/var下找更改时间在3天以前的文件。
6、find /etc -type l
查找在/etc下查找文件类型为|的链接文件。
7、find . -size +1000000c
查找在当前目录(及子目录)下查找文件大小大于1M的文件,1M是1000000个字节。
8、find . -perm 700 |xargs chmod 777
查找出当前目录(及子目录)下所有权限为700的文件,并把其权限重设为777。
9、find . -type f |xargs ls -l
查找出文件并查看其详细信息。
grep 是对文件内容中某行查找,找到符合条件的某一行
grep
grep -c "hello" text.txt
2.统计文件中匹配的数量
grep -o "hello" text.txt | wc -l
注意这个例子和上个的区别,-c选项在遇到一行中多次匹配正则表达式的情况时只是认为这一行匹配成功,而不会计算匹配成功的次数
这个选项很适用于在工程中搜索某些特定字符串
grep -e "hello" -e "world" test.txt
5.指定/排除文件
grep -r "main" ./src --include *.{c,cpp}
(2)搜索src目录中含有main的行,但不搜索readme文件:
grep -r "main" ./src --exclude "readme"
(3)搜索src目录中含有main的行,但不搜索.git文件夹:
grep -r "main" ./src --exclude-dir ".git"
6.零值字节
注意如果不使用-Z选项,则输出的文件名之间以空格符分隔。那么如果有个文件的文件名本身就是包含空格的,则该文件会被认为是两个文件,就可能造成误删

浙公网安备 33010602011771号