@wzhang1117
2014-05-26T21:46:32.000000Z
字数 1617
阅读 2358
linux
find
xargs
#查找/var/log下文件名中包含error的文件
find /var/log -name "*error*"
#-name后可以使用通配符,但是必须使用引号或反斜杠
find /var/log -name \*error\*
#查找/var/log下所有普通文件
find /var/log -type f
#-type后常用的有d目录,f普通文件,l符号链接
find /var/log -type d
find /var/log -type -l
#查找修改时间在3天以内的文件
find /var/log -mtime -3
#-3表示最近两天,+3表示3天以前,3表示前第三天
#-atime表示访问时间,-ctime表示文件状态变化时间
find /var/log -mtime +3
find /var/log -mtime 3
find /var/log -atime 3
find /var/log -ctime 3
#还有-mmin -amin -cmin,时间单位为分钟
#按用户查找
find /var/log -user root
#按权限查找
find /var/log -perm 755
默认情况下所有的条件都是与的关系,如果需要查找文件名中包含error或access的文件,!括号需要转义,注意(和)前后都需要空格
find /var/log -type f \( -name "*error*" -o -name "*access*" \)
对每个查找到的文件执行一段脚本,注意最后三个字符空格反斜杠和分号都不能少
find /var/log -type f -exec ls -l {} \;
#下面两个命令的输出是一样的
find /var/log -type f -print
find /var/log -type f
#下面两个命令的输出不一样,第一种情况不仅输出了ls -l的结果,还输出了find的结果,一般情况下不需要使用-print
find /var/log -type f -print -exec ls -l {} \;
find /var/log -type f -exec ls -l {} \;
作用和exec类似,但是比exec更加高效可靠
#下面两条命令实现相同的功能(-r表示如果find结果为空,则不构造ls命令,如果不适用-r,依然会执行 ls -l命令)
find /var/log -type f -exec ls -l {} \;
find /var/log -type f | xargs -r ls -l
#!如果文件名中有空格或其他特殊空白符,上面的命令会出错,更可靠的命令如下,-print0表示find的输出结果以NULL分割,-0表示以NULL分割输入
find /var/log -type f -print0 | xargs -0 -r ls -l
#还可以使用下面的方式
find /var/log -type f -print0 | xargs -0 -r -i ls -l {}
#查找日志文件中GET 500错误
find /var/log -type f | xargs grep " \"GET .* 500 "
#重命名当前目录下所有.JPG后缀为.jpg
find . -type f -name "*.JPG" -print0 | xargs -0 -r -i rename "s/.JPG$/.jpg/" {}
#修改apache配置的时候,由于版本较多,经常出现不知道配置项在那个配置文件中
#如关闭apache目录浏览功能,google之后得到结果需要修改Indexes选项,通过下面的命令可以查找Indexes的出现
find /etc/apache2 -type f | xargs grep " Indexes "
参考
A Unix/Linux “find” Command Tutorial
wiki: xargs
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/find.html