find是一个在目录下查找文件目录的工具,而且不同于locate它是精确查找,所以对于内容很多很大的目录它的速度会比较慢,但是它很强大,强大到我必须在这里总结一下。
find命令格式:
find [选项] 目录 [匹配模式] [处理动作];其中目录是必须存在的,因为他是在目录中查询文件目录的呀。
匹配条件:
按文件名来查找:
-name 匹配模式:在指定的目录下查找符合匹配模式的文件目录。
按文件的属主;属组;UID;GID查找:
-user USERNAME:在指定的目录下查找属主为USERNAME的文件目录。
-group GROUPNAME:在指定的目录下查找属组为GROUPNAME的文件目录。
-UID UIDNUM:在指定的目录下查找属主UID为UIDNUM的文件目录。
-GID GIDNUM:在指定的目录下查找属组GID为GIDNUM的文件目录。
-nouser:在指定的目录下查找没有属主的文件目录。
-nogroup:指定的目录下查找没有属组的文件目录。
按文件的类型来查找:
-type -f:在指定的目录下查找普通文件。
-type -d:在指定的目录下查找目录。
-type -l:在指定的目录下查找链接文件。
-type -b:在指定的目录下查找块文件。
-type -c:在指定的目录下查找字符型文件。
-type -s:在指定的目录下查找套接字文件。
-type -p:在指定的目录下查找管道文件。
按文件的时间戳来查找:
时间:
按天:
atime:文件最后一次被修改元数据(inod)的时间。
ctime:文件最后一次被访问的时间。
mtime:文件最后一次被修改数据(block)。
按分:
amin:文件最后一次被修改元数据(inod)的时间。
cmin:文件最后一次被访问的时间。
mmin:文件最后一次被修改数据(block)。
他们后面接的时间表示方式有:
[-atime -ctime -mtime] #:从执行find命令开始之前的#天到#+天的文件目录。
[-atime -ctime -mtime] +#:从执行find命令开始之前的#天到#天之前。
[-atime -ctime -mtime] -#:从#天到执行find命令之间的文件目录。
按文件的权限分:
权限的表示方式:
-perm mode(###):只匹配文件的权限为###的文件目录(精确权限查找)。
例如:755:只匹配文件的权限为rwxr-xr-x的文件目录。
-perm /mode(/###):匹配文件的属主拥有#权限或者属组拥有#权限或者其他人拥有#
权限的文件目录。(三个#只是代表数字并不一定相同)
例如:/111:匹配属主拥有x或者属组拥有x或者x的文件目录。但是需要注意的是
文件只要拥有这个权限就行,至于其他的权限是什么都匹配、例如;700也匹配。
-perm -mode(-###):匹配文件的属主拥有#权限并且属组拥有#权限并且其他用户拥有#
权限的文件目录。
例如:-444:匹配属主拥有r且属组拥有r去其他用户拥有r权限的文件目录。一样
需要注意的是只要拥有这个权限就满足条件,并不是精确的完整的权限。
处理动作:
-ls(exex ls -l {} \;):把find找到的文件目录用传给ls -l长格式输出出来。
-print:把find找到的文件目录打印出来,默认就会。
-fls 文件路径:把find找到文件目录记录到这个指定的文件中。
-delede:把find找到的文件目录删除。
-exec 命令 {} \;使用这个时候记住find把找到的文件目录都放在{}中,因此就可以用命令
来操作find找到的文件目录,注意{}后面必须一个空格而且-exec的终结标志是
“;”,但是很多“;”都有特殊意义,因此在它前面加上“\”来转义。
find 。。。| xargs 命令:将find找到的文件目录通过管道给xargs,然后xargs将其交给它
后面的命令来操作(与-exec不一样的是xrags是分批处理这些文件目录,而exec
是一次处理完,这样当文件目录太多太大的时候就会托底系统性能)。
逻辑:
-a:与
-o:或
-not:非
-not (-user USERNAME1 -a USERNAME2):文件目录属于USERNAME1或者USERNAME2。
-not (-user USERNAME1 -o USERNAME2):文件目录不属于USERNAME1也不属于USERNAME2。
至于匹配模式就是使用通配符和正则表达式来匹配就行。
-