现在的位置: 首页 > 综合 > 正文

find命令

2014年08月09日 ⁄ 综合 ⁄ 共 3265字 ⁄ 字号 评论关闭

inux下find命令拥有强大的功能。find命令可以在目录结构中搜索文件,并执行指定的操作。Linux下find命令提供了相当多的查找条件,几乎可以查找到所有你想要找到的文件。在linux运维和程序开发中,find命令是一个非常有用的命令。如51开源社区曾在一帖子说明如何使用find命令查找到磁盘中查找占用磁盘空间最大的文件,还有如果删除网站Cache目录中最旧的1000个文件。怎么样,find命令很实用吧,我会在文章后面用很多实用的例子讲解find命令。

find命令语法:

find pathname -options [-print -exec -ok ...]

find命令参数:

pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录,~表示家目录。

-print: find命令将匹配的文件输出到标准输出。

-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为’command’ {  } \;,注意{   }和\;之间的空格。

-ok: 和-exec的作用相同,交互模式,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

find命令选项:

-name

按照文件名查找文件。

-perm

按照文件权限来查找文件。

-perm mode:文件许可正好符合mode

-perm +mode:文件许可部分符合mode

-perm -mode: 文件许可完全符合mode

-prune

使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。

-user

按照文件属主来查找文件。

-group

按照文件所属的组来查找文件。

-amin n

查找系统中最后N分钟访问的文件

-atime n

查找系统中最后n*24小时访问的文件

-cmin n

查找系统中最后N分钟被改变文件状态的文件

-ctime n

查找系统中最后n*24小时被改变文件状态的文件

-mmin n

查找系统中最后N分钟被改变文件数据的文件

-mtime n

查找系统中最后n*24小时被改变文件数据的文件

-mtime -n +n

按照文件的更改时间来查找文件, – n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项。

-nogroup

查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。

-nouser

查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。

-newer file1 ! file2

查找更改时间比文件file1新但比文件file2旧的文件。

-type

查找某一类型的文件,诸如:

b – 块设备文件。

d – 目录。

c – 字符设备文件。

p – 管道文件。

l – 符号链接文件。

f – 普通文件。

-size n:

查找文件长度为n块的文件,带有c时表示文件长度以字节计。

-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。

-fstype:查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。

-mount:在查找文件时不跨越文件系统mount点。

-follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。

-cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。

-inum inode号:查找指定inode号的文件

find命令实例:

name选项

#find ~ -name “go*” -print

//查找家目录下以go开头的文件

#find  /  -name “[a-z][a-z][0-9].txt” -print

//查找/目录下文件名前面两个是字母,后面接一个数字的txt文件。

[root@DigMouse GoFace]# find . -name go.txt -print

./go.txt

[root@DigMouse GoFace]# find . -iname go.txt -print      //-iname忽略大小写

./go.txt

./Go.txt

#find ~ -perm 777 -print  //查找~下权限为777的文件

#find ~ -perm g=r  -type=f -exec ls -l {} \;

//查找~下拥有组有读权限的普通文件并列出。

#find /apps -path “/apps/bin” -prune -o -print  //不在/app/bin下查找

#find /apps  \( -path  /apps/bin -o -path /apps/temp \) -prune -o -print //忽略多个文件夹

#find /apps  \( -path  /apps/bin -o -path /apps/temp \) -prune -o -name “goface” -print

//name应放在-o后面

#find / -user wilson | xargs ls -l

//列出/下文件属主为wilson的文件

#find /-nouser -print

//查找没有有效帐户的文件

-group与-nogroup使用方法同上

#find /etc -type d -print //列出/下的所有目录

#find / -amin -10 # 查找在系统中最后10分钟访问的文件

#find / -atime -2 # 查找在系统中最后48小时访问的文件

#find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件

#find / -mtime -1 #查找在系统中最后24小时里修改过的文件

#find / -cmin -5 # 查找在系统中最后5分钟里被改变状态的文件

#find / -ctime -1 #查找在系统中最后24小时里被改变状态的文件

#find /usr/local/apache/logs -name access_*.log  -mtime +7 -exec rm -rf {} \;

//删除过去一个星期的apache日志

#find . -size +20 -print

//在当前目录下查找长度超过20块的文件(一块等于512字节)

#find . size +1000000 -print

//查找当前目录下文件大小为1M的文件

当然现在find也支持使用M 、G为单位,如:

#find  / -type f -size +10G -print

//查找系统中占用磁盘空间超过10G的文件

案例:http://bbs.51osos.com/thread-4182-1-1.html

#find . -name “GoFace.txt” -mount -print

//在当前目录当前文件系统内查找GoFace.txt

[root@DigMouse ~]# find GoFace -type f -empty

GoFace/go.txt

[root@DigMouse ~]# find GoFace -type f -size 0 -exec ls -l {} \;

-rw-r–r– 1 root root 0 Aug 14 17:04 GoFace/go.txt

[root@DigMouse ~]# find GoFace -type f -size 0 -exec ls {} \;

GoFace/go.txt

//查找GoFace目录下文件大小为0的文件

#find  / -maxdepth 2 -name goface.txt

//查找/下名称为goface.txt,最多查找两层

#find /cache -type f |xargs ls -tr | head -1000 |xargs rm

//删除Cache目录中最旧的1000个文件

#find -inum  898985 -exec rm {} \;

//删除inode号为898985的文件。

#find / -false //查找系统总是显示错误的文件

转载请注明:via GoFace  原文:http://blog.51osos.com/linux/linux-find-command/

抱歉!评论已关闭.