一、find命令
格式:
find path -options
选项:
-name 按照文件名查找,支持正则。
find . -name "[a-z][a-z][0--9][0--9].txt"
-type 按照文件类型查找(f-普通文件、d-目录、l-符号链接文件)
find . -type f
-perm 按照文件权限查找
find . -type f -perm 644
-user 按照文件属主查找
-group 按照文件所属的组查找
-nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
-size 按照文件大小查找
这里所指的文件长度既可以用块(block)来计量,也可以用字节来计量。以字节计量文件长度的表达形式为N c;以块计量文件长度只用数字表示即可。
// 在当前目录下查找文件长度大于1 M字节的文件:find . -size +1000000c
// 在/home/apache目录下查找文件长度恰好为100字节的文件:find /home/apache -size 100c
// 在当前目录下查找长度超过10块的文件(一块等于512字节):find . -size +10
-newer file1 ! file2 查找更改时间比文件file1新但比文件file2旧的文件。
-mmin/mtime/amin/atime/cmin/ctime -n +n
-amin n 查找系统中最后N分钟访问的文件
-atime n查找系统中最后n*24小时访问的文件
-cmin n查找系统中最后N分钟被改变文件状态的文件
-ctime n查找系统中最后n*24小时被改变文件状态的文件
-mmin n查找系统中最后N分钟被改变文件数据的文件
-mtime n查找系统中最后n*24小时被改变文件数据的文件
-prune 使用-prune选项来指出需要忽略的目录,不能和-depth同时使用。
二、find命令配合-exec 或 -ok
-exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{},一个空格和一个\,最后是一个分号。
-ok是-exec的安全模式,每次都是先询问一下,然后根据y或者n命令来执行或放弃。
find . -type f -exec ls -l { } \;
find . -type f -ok ls -l { } \;
find logs -type f -mtime +5 -exec rm { } \;
find . -name "*.conf" -mtime +5 -ok rm { } \;
find /etc -name "passwd*" -exec grep "sam" { } \;
三、find命令配合xargs
在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。
find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。究竟以什么样适当的大小组起来(由主机的 ARG_MAX 值决定). ARG_MAX 值查看方法: getconf ARG_MAX
在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。
find . -type f | xargs file
find . -type f | xargs grep "hostname"