简单总结一下,几个常用的linux命令。
一、find
用来查找特定文件,在linux下一切皆是文件,因此十分有用。
基本格式:find path expression [-exec command {} \;]
会默认遍历到子目录。
1、find /home/work/ -name "*.cpp"
查找/home/work/目录下,所有文件名以.cpp结尾的文件,当然目录也会匹配出来。
2、find /home/work/ -name -type f "*.cpp"
查找/home/work/目录下,所有文件名以.cpp结尾的普通文件。
3、find /home/work/ -iname "*.cpp"
-iname 表示忽略大小写,-name表示不忽略大小写,精确匹配。
4、find /home/work/ /etc/ /usr -name "*.cpp"
查找多个目录下的.cpp文件
扩展 : find /home/work/ /etc/ /usr -name "[ab].cpp" 查找a.cpp或者b.cpp文件
find /home/work/ /etc/ /usr -name "?.cpp" "?"表示任意一个字符
5、 find /home/work/ -size +20M
查找大于20M的文件,-20M表示小于20M
6、find /home/work -atime -5
查找5天内访问过的文件, +5 表示5天内没有访问过的文件。
扩展:用stat命令可以获得相关的时间戳。atime表示最近一次访问的时间,mtime表示最近一次内容修改的时间,ctime表示最近一次属性修改的时间,单位是天。amin, mmin,cmin单位是分钟。
7、find /home/work -atime -5 -a -size -1M
查找5天访问过的并且大小小于1M的文件。
-a 与连接 , -o 或连接, -not 条件取反
二、grep
用来匹配特定的文本行,全称是Global Regular Expression Print。
基本格式: grep [OPTIONS] PATTERN [FILE...]
1、grep "hello" ./*
遍历当前目录下的所有文件,把含有"hello"的文本行的打印出来。
grep -r "hello" ./* 会遍历子目录。
2、其他参数控制
-i 匹配时,忽略大小写
-n 显示行号
-c 只显示匹配到的文本行总数
-l 只显示匹配到文本行的文件名
-v 显示没有匹配到的文本行,相当于取反操作。
三、wc
文本统计工具,全城word count。使用方法很简单。能将文件的行数、字数、字节数打印出来。
1、wc -l test.txt
统计test.txt中文本的行数。
2、wc -c test.txt
统计字节数
3、wc -w test.txt
统计字数,我所理解的字就是一个单词,单词都是又空格、tab键、换行符来分割的。
4、wc -m test.txt
统计字符数。这和字节数是有区别的,因为一个中文字符会占3个字节。
四、实例操作
1、统计/home/work/目录下所有以.txt结尾的文件个数(不包括目录)
find /home/work/ -type f -name "*.txt" | wc -l
2、删除/home/work/目录下所有以.txt结尾的文件
find /home/work/ -type f -name "*.txt" -exec rm -f {} \;
-exec 后面跟着执行动作,就是一个操作命令,即每查找到一个文件就执行rm -f 动作,{}就代表查找到的文件,\; 表示命令的结束。
注意,{}和\之间有空格。
也可以这样做:
find /home/work/ -type f -name "*.txt" | xargs rm -f
3、统计/home/work/当前目录下有多少普通文件(即不遍历子目录)
ls /home/work -l | grep '^-' |wc -l
-l 参数显示出文件的属性,开头为‘-’表示普通文件,从而排除目录,'^-'表示匹配开头为‘-’的字符串。
以上仅为简单总结,之后再继续补充。