find、grep、wc使用方法简单总结

原文链接:find、grep、wc使用方法简单总结
发布时间:2016-06-09 09:54:43

简单总结一下几个常用的 Linux 命令。

一、find

用来查找特定文件,在 Linux 下一切皆是文件,因此十分有用。

基本格式:find path expression [-exec command {} \;],默认会遍历子目录。

1. 查找 /home/work/ 下所有以 .cpp 结尾的文件(目录也会匹配):

1
find /home/work/ -name "*.cpp"

2. 只查找普通文件(-type f 排除目录):

1
find /home/work/ -type f -name "*.cpp"

3. -iname 忽略大小写,-name 精确匹配:

1
find /home/work/ -iname "*.cpp"

4. 同时查找多个目录:

1
find /home/work/ /etc/ /usr -name "*.cpp"

扩展——查找 a.cppb.cpp

1
find /home/work/ /etc/ /usr -name "[ab].cpp"

? 表示任意一个字符:

1
find /home/work/ /etc/ /usr -name "?.cpp"

5. 按大小查找,+20M 大于 20M,-20M 小于 20M:

1
find /home/work/ -size +20M

6. 按访问时间查找,-5 表示 5 天内访问过,+5 表示超过 5 天未访问:

1
find /home/work -atime -5

stat 命令可获得相关时间戳:

  • atime — 最近一次访问时间
  • mtime — 最近一次内容修改时间
  • ctime — 最近一次属性修改时间

以上单位是天;aminmmincmin 单位是分钟。

7. 组合条件——5 天内访问过 小于 1M:

1
find /home/work -atime -5 -a -size -1M
  • -a 与连接
  • -o 或连接
  • -not 条件取反

二、grep

用来匹配特定的文本行,全称 Global Regular Expression Print。

基本格式:grep [OPTIONS] PATTERN [FILE...]

1. 在当前目录所有文件中查找含 hello 的行:

1
grep "hello" ./*

-r 遍历子目录:

1
grep -r "hello" ./*

2. 常用参数:

参数 作用
-i 忽略大小写
-n 显示行号
-c 只显示匹配到的行数
-l 只显示匹配到的文件名
-v 反向匹配,显示未匹配的行

三、wc

文本统计工具,全称 word count,能将文件的行数、字数、字节数打印出来。

1. 统计行数:

1
wc -l test.txt

2. 统计字节数:

1
wc -c test.txt

3. 统计字数(单词由空格、tab、换行符分割):

1
wc -w test.txt

4. 统计字符数(与字节数不同,一个中文字符占 3 字节):

1
wc -m test.txt

四、实例操作

1. 统计 /home/work/ 下所有 .txt 文件个数(排除目录):

1
find /home/work/ -type f -name "*.txt" | wc -l

2. 删除 /home/work/ 下所有 .txt 文件:

1
find /home/work/ -type f -name "*.txt" -exec rm -f {} \;

-exec 后跟执行动作,{} 代表查找到的文件,\; 表示命令结束(注意 {}\; 之间有空格)。

也可以用 xargs

1
find /home/work/ -type f -name "*.txt" | xargs rm -f

3. 统计 /home/work 当前目录下有多少普通文件(不遍历子目录):

1
ls /home/work -l | grep '^-' | wc -l

-l 显示文件属性,开头 - 表示普通文件,'^-' 匹配以 - 开头的行,从而排除目录。

以上仅为简单总结,之后再继续补充。