1,locate
locate是通过数据库的方式搜索的,所以速度更快,要先安装locate,新系统都是mlocate或者slocate,locate命令通过符号链接过去。所以可以
yum install mlocate
查找文件如果报错
[root@minimal html]# locate mysql.log
locate: 无法执行 stat () `/var/lib/mlocate/mlocate.db': 没有那个文件或目录
可以使用
updatedb
命令更新数据库,如果有新文件,需要执行updatedb,更新才能搜索到。应该仍然比find快。updatedb也会每天自动执行一次。
2, find
1),tests
-type c 匹配c类型文件
-user name 匹配属于name用户的文件/目录
-perm mode 匹配权限
-empty 匹配空文件/目录
还有其他一些时间测测试项
2),操作符
-and 简写为 -a,逻辑与
-or 简写为 -o,逻辑或
-not 简写为 !,逻辑非
( ) 可以改变优先级,使用的时候,前面要加反斜线,\( \)
3), 内建命令
-delete 删除匹配到的
-ls 显示匹配到的
-print 打印匹配到的
-print0 将文件中的单引号、双引号、换行符、空格显示成null
例如:
find ~ -type f -name '*.bak' -delete
4),用户定义的操作
-exec command {} ;
{} 代表匹配到的文件和目录,分号;代表exec目录的结束。在实际使用的时候要加引号,如下:
-exec rm '{}' ';'
除了-exec,还有-ok选项,-ok会弹出一个交互,让用户选择是否执行。
5),效率上的改进
-exec command '{}' ';' 会在每个匹配到的文件/目录上反复执行command命令,但是
-exec command '{}' + 是将所有文件/目录组合成一个列表,来执行command一次。
区别有点类似于
ls -l a.txt
ls -l b.txt
和 ls -l a.txt b.txt
更通用的是用xargs命令
3,xargs
将标准输入转换成命令的参数列表。例如:
find ~ -type f -name 'foo*' -print | xargs ls -l
为了防止文件名中有特殊字符,应该这么配合使用
find ~ -iname '*.jpg' -print0 | xargs --null ls -l