一、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、查找目录、文件
find /home -type d -name 'quejinlong*' //从/home开始查找目录名包含quejinlong的目录
find /home -type f -name 'quejinlong*' //从/home开始查找文件名包含quejinlong的文件
4、改变当前目录下所有文件的所有权
find . -exec chown OWNER.[GROUP] {} /; (Solaris平台)
find . -exec chown -R OWNER.[GROUP] {} /; (Linux平台)
5、查找当前目录下,包含有3306字符串的文件
find . -type f -name "*.xml" |xargs grep "3306"
6、查找当前目录一天之前到此时之间修改的文件,也就是过去的24小时内修改的文件find -mtime 0
7、公司网站被注入以下代码:
<a href="http://www.lx0750.com/">理想0750</a>
清除命令:find . -type f -name "*.html" -print |xargsxargs perl -pi -e 's/<a.*0750.*a>//g'
window.open ('http://www.lx0750.com/')
清除命令:find . -type f -name "*.html" -print |xargs perl -pi -e 's/window.open.*\)//g'
8、查询最近24小时内有修改的php文件并显示出来
find /usr/local/apache/htdocs/ -type f -name "*.php" -mtime 0 -exec ls -l {} \;
find /usr/local/apache/htdocs/ -type f -name "*.php" -mtime 0 -exec cp {} /opt/muma/ \;
find /usr/local/apache/htdocs/ -type f -name "*.php" -mtime 0 -exec cp {} /opt/muma/ \;
9、批量删除所有子目录,保留当前目录下的文件
find . -maxdepth 1 -type d -exec ls -t {} \;
find . -maxdepth 1 -type d -exec cp -r {} /opt/temp/ \;
更多:
http://www.jb51.net/os/RedHat/1307.html
本文详细介绍了Linux系统中find、grep、wc三个常用命令的具体用法及实际操作案例,帮助读者掌握如何利用这些命令进行文件搜索、文本匹配和统计。
732

被折叠的 条评论
为什么被折叠?



