find 命令

语法:find 搜索路径 匹配表达式

功能:该命令用于在指定路径中查找符合条件的文件,搜索路径可以是多个目录,不同目录之间以空格分隔。

匹配表达式1

1.-name filename:
要查找的文件名。可以使用通配符“*”,“?”,但要用双引号将文件名引起来。
例:

1
2
3
4
5
6
7
8
find -name "h*" -print
#在当前目录下查找以h开头的文件

find . -name "*.java"
#查找当前目录下所有扩展名为java的文件

find / -name hosts -print
#在整个文件系统中查找名为hosts的文件

2.-user username:
查找属于username用户的文件。
例:

1
2
find /home -user user1 -print
#找出/home下属于用户user1的所有文件

3.-group groupname:
查找属于groupname组的文件。

NOTE:
-print:显示找到文件路径名。

匹配表达式2

1.-exec 命令 {}:
对找到的匹配文件,执行所列出的命令,而不询问用户是否执行这些命令,参数{} 由find找到当前的文件路径名取代,命令行末尾必须有“;”。
例:

1
2
3
4
5
find /home –user user1 –exec cat {}\;|more
#找出/home下属于用户user1的所有文件并显示其内容

find /home –user user1 –exec rm –r {} \;
#找出/home下属于用户user1的所有文件并删除

2.-ok 命令 {}:
与-exec的用法相同,在执行命令之前询问用户是否要执行命令。

匹配表达式3

1.-atime n:查找前n天访问过的文件(仅第n天这一天)。
2.-atime +n:查找前n天之前访问过的文件;-n则表示前n天之后。
例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
find /home –atime +365 –print
#找出用户一年前访问过的文件

find $home –user user1 –atime +3 –exec rm –r {} \;
#找出用户user1主目录下属于自己的前3天之前访问过文件并删除

find / -amin -10   
#查找在系统中最后10分钟访问的文件(access time)

find / -atime -2  
#查找在系统中最后48小时访问的文件

find / -mmin -5   
#查找在系统中最后5分钟里修改过的文件(modify time)

find / -mtime -1   
#查找在系统中最后24小时里修改过的文件

匹配表达式4

1.-type filetype:
指定查找的文件类型。
filetype 可以是:b块文件;c字符设备文件;d目录文件;f一般文件。
例:

1
2
3
4
5
find –type d –print
#查找当前目录下的所有的子目录

find –type f –print
#查找当前目录下的所有的普通文件

匹配表达式5

-size 按照文件大小进行查找。
(c:字节,w:双字,k:KB,M:MB,G:GB)

  • -size Number Number大小以块(一般是512字节)为单位,找对应大小的文件
  • -size Numberc Numberc大小以字节为单位,找对应大小的文件
  • -size -Numberc 查找比该值小的文件
  • -size +Numberc 查找比该值大的文件

例:

1
2
3
4
5
6
7
8
find –size -10 –print
#查找当前目录下所有长度小于10块的文件

find –size -10c –print | ls –l
#查找当前目录下所有长度小于10字节的文件并以长格式显示文件信息

find –size +100 –size -200 –exec ls –s {} \;
#在当前目录下查找100~200块长的文件并显示文件的实际块数

其他/混合使用

1
2
find / -empty   
# 查找在系统中为空的文件或者文件夹

混合使用:
参数有: !,-and(-a),-or(-o)。

1
2
3
4
5
6
7
8
find /tmp -size +10000c -and -mtime +2   
#在/tmp目录下查找大于10000字节并在最后2分钟内修改的文件

find / -user fred -or -user george   
#在/目录下查找用户是fred或者george的文件文件

find /tmp ! -user panda  
#在/tmp目录中查找所有不属于panda用户的文件

grep 命令

语法:grep【参数】 查找模式 文件名 【文件名】

功能:grep命令用于在指定文件中查找与模式匹配的行,并将匹配的行显示在标准输出上。如果没有指定文件,则从标准输入中读取。当在多个文件中进行查找中,将在每一行输出之前加上文件名。在搜索的文件名中允许使用通配符。

主要参数:

  • -c:只输出匹配行的计数。
  • -i:不区分大小写
  • -h:查询多文件时不显示文件名。
  • -l:查询多文件时只输出包含匹配字符的文件名。
  • -n:显示匹配行及行号。
  • -s:不显示不存在或无匹配文本的错误信息。
  • -v:显示不包含匹配文本的所有行。
  • -f: filename:从指定文件中获取搜索模式,每行一个搜索模式项。

pattern正则表达式主要参数:

1
2
3
4
5
6
7
8
9
\: 忽略正则表达式中特殊字符的原有含义。
^:匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
\<:从匹配正则表达 式的行开始。
\>:到匹配正则表达式的行结束。
[ ]:单个字符,如[A]即A符合要求 。
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
.:所有的单个字符。
* :有字符,长度可以为0。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
grep 'test' d*  
#显示所有以d开头的文件中包含 test的行

grep ‘test’ aa bb cc   
#显示在aa,bb,cc文件中包含test的行

grep ‘[a-z]\{5\}’ aa   
#显示所有包含每行字符串至少有5个连续小写字符的字符串的行

grep magic /usr/src  
#显示/usr/src目录下的文件(不含子目录)包含magic的行

grep -r magic /usr/src  
#显示/usr/src目录下的文件(包含子目录)包含magic的行

grep -w pattern files
#只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’)

grep printf *.c
#在当前目录下的所有C文件中查找printf字符串

grep user1 /ect/password
#将系统帐号中文件包含user1的行显示出来。

默认情况下,’grep’只搜索当前目录。如果 此目录下有许多子目录,’grep’会以如下形式列出:
grep: sound: Is a directory
这可能会使’grep’ 的输出难于阅读。这里有两种解决的办法:
明确要求搜索子目录:grep -r
或忽略子目录:grep -d skip
如果有很多 输出时,可以通过管道将其转到’less’上阅读:
grep magic /usr/src/Linux/Documentation/* | less
这样就可以更方便地阅读。

find与grep命令组合使用

find与grep命令组合使用,在大量文件中查找非常方便,如:

1
2
3
4
5
find . -name "*.c" | xargs grep "hello" #在当前目录所有.c文件查找包含hello字符串的文件

find -name "*.c" | grep -s gt9xx
#查找路径下带某个文件夹或者文件名的文件