Linux中文件查找命令find

find命令是我最喜欢的命令之一,有它可以方便的查找出我想要找到文件,它可以支持太多的方法去查找,可以按照文件名、按文件大小、按文件类型等等。下面,我们一起来看看吧。

语法:find [查找路径] [选项] [动作]

find命令的选项可不要太多,今天我只会讲一些经常会用到的选项。

根据文件名查找

通过文件名查找的选项为-name,他支持简单的正则查找。

比如,我知道locale.conf,保存在/etc目录下,但具体路径忘记了,那么

# find /etc/ -name locale.conf
/etc/locale.conf

就可以找出该文件具体路径了。

现在我想要知道某个目录下php文件有多少个,那么可以使用以下命令来完成。

# find default -name *.php | wc -l
122

或选项-o

这里再介绍一个选项,-o,他表示或的意思,一般默认find选项之间都是且的意思。下面看一个实例,查找某目录下,php或js文件的数量总和。

# find default -name *.php -o -name *.js | wc -l
225

根据文件类型及目录深度查找

查找文件类型需要使用-type选项,常用的类型有f(文件)、d(目录)。另外再介绍个选项,-maxdepth表示最多递归几层目录。

# find ./  -maxdepth 1  -type d
./
./default
./default.bak

否定选项!

# find ./  -maxdepth 1 ! -type f
./
./default
./default.bak

与时间相关的查找

与时间有关的选项: 共有-atime, -ctime 与-mtime ,以-mtime 说明
-mtime n n 为数字,意义为在n 天之前的『一天之内』被更动过内容的文件;
-mtime +n 列出在n 天之前(不含n 天本身)被更动过内容的文件文件名
-mtime -n 列出在n 天之内(含n 天本身)被更动过内容的文件文件名。
-newer file file 为一个存在的文件,列出比file 还要新的文件文件名

这个选项很有作用,比如进行数据定时备份时,只保留最近7天的数据,超过7天的自动删除就会用到该选项。注意+n表示n天之前,-n表示n天之内。

# find $bakdir -name "*.sql.bz2" -type f -mtime +7 -exec rm -rf {} \;

根据用户名、组来查找

与使用者或群组名称有关
-uid n n 为数字,这个数字是使用者的帐号ID,亦即UID
-gid n n 为数字,这个数字是群组名称的ID,亦即GID
-user name name 为使用者帐号名称,例如dmtsai
-group name name 为群组名称,例如users ;
-nouser 寻找文件的拥有者不存在 的人!
-nogroup 寻找文件的拥有群组不存在于/etc/group 的文件!

查找某目录下,所有者不是www的文件有哪些。

find /home/wwwroot/default ! -user www | wc -l

根据文件大小查找

按文件大小查找使用-size选项,比如查找大于1M的文件,那么使用-size +1M,如果查找小于1K的,那么使用-size -1K

# find /home/wwwroot/default -size +1M

# find /home/wwwroot/default -size -1k

根据文件权限查找

-perm mode 搜寻文件权限『刚好等于』 mode 的文件,这个mode 为类似chmod的属性值,举例来说, -rwsr-xr-x 的属性为4755 !
-perm -mode 搜寻文件权限『必须要全部囊括mode 的权限』的文件,举例来说,我们要搜寻-rwxr–r– ,亦即0744 的文件,使用-perm -0744,当一个文件的权限为-rwsr-xr-x ,亦即4755 时,也会被列出来,因为-rwsr-xr-x 的属性已经囊括了-rwxr–r– 的属性了。
-perm /mode 搜寻文件权限『包含任一mode 的权限』的文件,举例来说,我们搜寻-rwxr-xr-x ,亦即-perm /755 时,但一个文件属性为-rw——-也会被列出来,因为他有-rw…. 的属性存在!

我们知道,文件的权限一般为644,目录的权限一般为755。如果,不是等于这个权限,可能就会有点问题,那么我们来找找看,是否有这类文件。

find /home/wwwroot/default ! -perm 644 -type d -exec ls -ld {} \;

# 查找权限不是644的文件,并将其修改为644
find /home/wwwroot/default ! -perm 644 -type f | xargs -n 10 chmod 644;

动作执行

其实这个命令上面已经使用到了,使用-exec选项,然后接命令,最后要以{} \;结尾,比如

find /home/wwwroot/default ! -perm 644 -type d -exec ls -ld {} \;

其他

find还支持正则(-regex)查找文件名,还可以不区分大小写(-iregex);

使用-empty可以查找文件大小为0的文件。

# find . -empty -exec ls -l {} \;