[Linux]find⽂件查和grep⽂件内容查
在使⽤linux时,经常需要进⾏⽂件查。其中查的命令主要有find和grep。两个命令是有区别的:
(1)find命令:根据⽂件的属性进⾏查,如⽂件名,⽂件⼤⼩,所有者,所属组,是否为空,访问时间,修改时间等。
(2)grep命令:根据⽂件的内容进⾏查,会对⽂件的每⼀⾏按照给定的模式(patter)进⾏匹配查。
⼀.find命令
基本格式:find path expression
1.按照⽂件名查
(1)find / -f #在根⽬录下查⽂件f,表⽰在整个硬盘查
(2)find /etc -f #在/etc⽬录下⽂件f
(3)find /etc -name '*srm*' #使⽤通配符*(0或者任意多个)。表⽰在/etc⽬录下查⽂件名中含有字符串‘srm’的⽂件linux查看当前文件夹内容
(4)find . -name 'srm*' #表⽰当前⽬录下查⽂件名开头是字符串‘srm’的⽂件
2.按照⽂件特征查
(1)find / -amin -10 # 查在系统中最后10分钟访问的⽂件(access time)
(2)find / -atime -2 # 查在系统中最后48⼩时访问的⽂件
(3)find / -empty # 查在系统中为空的⽂件或者⽂件夹
(4)find / -group cat # 查在系统中属于 group为cat的⽂件
(5)find / -mmin -5 # 查在系统中最后5分钟⾥修改过的⽂件(modify time)
(6)find / -mtime -1 #查在系统中最后24⼩时⾥修改过的⽂件
(7)find / -user fred #查在系统中属于fred这个⽤户的⽂件
(8)find / -size +10000c #查出⼤于10000000字节的⽂件(c:字节,w:双字,k:KB,M:MB,G:GB)
(9)find / -size -1000k #查出⼩于1000KB的⽂件
3.使⽤混合查⽅式查⽂件
参数有:!,-and(-a),-or(-o)。
(1)find /tmp -size +10000c -and -mtime +2 #在/tmp⽬录下查⼤于10000字节并在最后2分钟内修改的⽂件
(2)find / -user fred -or -user george #在/⽬录下查⽤户是fred或者george的⽂件⽂件
(3)find /tmp ! -user panda #在/tmp⽬录中查所有不属于panda⽤户的⽂件
OR 操作符
当我们使⽤多个查条件时, find 命令会将它们通过 AND 操作符结合起来,也就是说,只有满⾜所有条件的⽂件才会被列出。不过,如果我们需要进⾏基于 OR 运算的查时,可以加上 -o 开关。
$ find -name '*.php' -o -name '*.txt'
./
./subdir/how.php
./abc.php
./cool.php
上⾯的命令查所有以 .php 结尾或者以 .txt 结尾的⽂件。
查并删除⽂件
$ find . -name "*.pyc" | xargs rm -f
查并删除⽂件夹
$ find . -name ".idea" | xargs rm -r
$ find . -name ".idea" -o -name "__pycache__" -o -name "venv" | xargs rm -r
⼆、grep命令
基本格式:grep expression path
1.主要参数
[options]主要参数:
-c:只输出匹配⾏的计数。
-i:不区分⼤⼩写
-h:查询多⽂件时不显⽰⽂件名。
-l:查询多⽂件时只输出包含匹配字符的⽂件名。
-n:显⽰匹配⾏及⾏号。
-s:不显⽰不存在或⽆匹配⽂本的错误信息。
-v:显⽰不包含匹配⽂本的所有⾏。
pattern正则表达式主要参数:
\:忽略正则表达式中特殊字符的原有含义。
^:匹配正则表达式的开始⾏。
$: 匹配正则表达式的结束⾏。
\<:从匹配正则表达式的⾏开始。
\>:到匹配正则表达式的⾏结束。
[ ]:单个字符,如[A]即A符合要求。
[ - ]:范围,如[A-Z],即A、B、C⼀直到Z都符合要求。
.:所有的单个字符。
* :有字符,长度可以为0。
2.使⽤
(1) 在某⽂件中查
grep "xxx" filename
另外,加上-n参数表⽰显⽰⾏数
grep -n "xxx" filename
(2) 在多个⽂件中查
grep "xxx" filename1 filename2 filename3 ...
或者
grep "xxx" *.py
(3) 在⽂件夹中递归地查
grep -r "xxx" directory_name
例如在当前⽂件夹下查
grep -r "xxx" .
3.实例
(1)grep 'test' d* #显⽰所有以d开头的⽂件中包含 test的⾏
(2)grep ‘test’ aa bb cc #显⽰在aa,bb,cc⽂件中包含test的⾏
(3)grep ‘[a-z]\{5\}’ aa #显⽰所有包含每⾏字符串⾄少有5个连续⼩写字符的字符串的⾏
(4)grep magic /usr/src #显⽰/usr/src⽬录下的⽂件(不含⼦⽬录)包含magic的⾏
(5)grep -r magic /usr/src #显⽰/usr/src⽬录下的⽂件(包含⼦⽬录)包含magic的⾏
(6)grep -w pattern files :只匹配整个单词,⽽不是字符串的⼀部分(如匹配’magic’,⽽不是’magical’),参考:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论