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/