03_查找和检索
2017-08-04 本文已影响7人
对方不想理你并向你抛出一个异常
find
- 根据文件名查找
find pathname -options [-print -exec -ok -name -type...]
- 在目录中搜索文件,path指定目录路径,系统从这里开始沿着目录树向下查找文件。它是一个路径列表,相互用空格分离,如果不写path,那么默认为当前目录。Expression 是find命令接受的表达式,find命令的所有操作都是针对表达式的。
- 一条最常用的find命令--在当前目录及子目录下查找所有以file开头的文件名。
$ find . -name 'file*'
$ find \/ -name 'vimrc'
$ find ~ -name '*.c'
$ find /usr/ -name "*tmp*" -exec ls -l { } \;
find ./ -name "*tmp" -ok rm { } \;
sudo find ./ -size +65M
//搜索大于65M的文件
sudo find ./ -size +65M -size -100M -exec ls -lh {} \;
//搜索大于65M的文件小于100M的文件,并按格式显示
注意:
-
-exec
表示对结果集执行二次命令 -
*
表示通配符 -
?
表示只匹配一个字符 -
\;
固定语法,表示结束符 -
-type
按类型来搜索
grep
- 根据内容检索
grep [options] PATTERN [FILE...]
- 在指定文件中搜索特定的内容,并将含有这些内容的行输出到标准输出。若不指定文件
名,则从标准输入读取。
- [options]部分包含的主要参数:
-I:不区分大小写(只适用于单字符)。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
-R: 连同子目录中所有文件一起查找。
- 比如到系统头文件目录下查找所有包含printf的文件
$ grep 'printf' /usr/include -R
xargs
- 从标准输入建立和执行命令行
xargs [OPTION] [command]
- 它的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题
- 在使用find命令的-exec选项处理匹配到的文件时,find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。
- find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。
- 查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件:
find . -type f | xargs file
查找usr目录下名字以“tmp”开头的文件,将其详细信息列出。
//错误,结果是当前目录的ls -l信息
find /usr -name "tmp*" | ls -l
find /usr -name "tmp*" | xargs ls -l
find /usr -name "tmp*" -print0 | xargs -0 ls -l
- -print0表示输出以null分隔(-print使用换行);-0表示输入以null分隔。查找当前目录下,文件名包含“bin”字串的文件,并在文件中搜索“printf”这个词
find ./ -name "*bin*" | grep "printf"
find ./ -name "*bin*" | xargs grep "printf"
find ./ -name "*bin*" -print0 | xargs -0 grep "printf"