【概述】
find命令是Linux中一个很强大的查找命令,用于在目录结构中搜索文件并执行指定操作。只要具有相应的权限,即使系统中含有网络文件系统(NFS),find 命令在该文件系统中同样有效。由于find命令功能强大,常被用来在大文件系统中查找文件,这会话费很长时间,所以人们更倾向于把它放在后台执行。接下来我们看看find命令的具体用法。
【1】命令格式
find pathname -options[-print -exec -ok ...]
find 查找路径 -命令参数
【2】命令功能
find命令用于在文件树中查找文件,并做出相应的处理,这个过程中有可能会访问磁盘
【3】命令参数
pathname:find命令所查找的目录路径
例如用.来表示当前目录,用/来表示系统根目录
-print:find命令将匹配的文件输出到标准输出
-exec:find命令对匹配的文件执行该参数所给出的shell命令
相应命令的形式为'command' { } \;(注意{ }和\之间有空格)
-ok:和-exec的作用相同,只不过以一种更安全的模式来执行该参数所给出的shell命令
在执行每一个命令之前,都会给出提示,让用户来确定是否执行
【4】命令选项
1.根据时间查找文件 -atime/-ctime/-mtime/-newer/-anewer/-used
-atime -n +n 按文件访问时间来查找文件,-n指n天以内,+n指n 天以前
-ctime -n +n 按文件创建时间来查找文件,-n指n天以内,+n指n 天以前
-mtime -n +n 按文件更改时间来查找文件,-n指n天以内,+n指n 天以前
-newer file1 ! file2 查找更改时间比文件file1新但比文 件file2旧的文件
eg.
-amin -10 // 查找在系统中最后10分钟访问的文件
-amin +30 // 查找最近30分钟前被存取过的文件
-atime -2 // 查找在系统中最后48小时访问的文件
-atime -1 // 查找1天之内被存取过的文件
-mmin +60 // 查找60分钟前改动过的文件
-mmin -5 // 查找在系统中最后5分钟里修改过的文件
-mtime -2 // 查找最近两天内改动过的文件
-mtime -1 // 查找在系统中最后24小时里修改过的文件
-newer tmp.txt // 查找更新时间比tmp.txt近的文件或目录
-anewer tmp.txt // 查找存取时间比tmp.txt近的文件或目录
-used -2 //列出文件或目录被改动过之后,在2日内被存取过的文件或目录
由此可以看出,min是分钟,time是小时,a访问,c改变状态,m改变数据
2.根据文件名查找文件 -name
-name filename 查找名为filename的文件
eg.
-name "*.txt" // 查找.txt文件并显示
-name "[A-Z]*" // 查找以大写字母开头的文件
-name "host*" // 查找以host开头的文件
-name "[a-z][a-z][0�9][0�9].txt" // 查找以两个小写字母和两个数字开头的txt文件
-name april* // 查找以april开始的文件
-name april* fprint file // 查找以april开始的文件,并把结果输出到file中
-name ap* -o -name may* // 查找以ap或may开头的文件
-name tom.txt -ftype vfat // 查找名称为tom.txt且文件系统类型为vfat的文件
-name t.txt ! -ftype vfat // 查找名称为tom.txt且文件系统类型不为vfat的文件
-name wa* -type l // 查找名为wa开头且类型为符号链接的文件
3.根据文件权限查找文件 -perm
-perm 按执行权限来查找
eg.
-perm 700 // 查找权限为700的文件或目录
-perm 777 // 查找所有用户都可读写执行的文件
4.根据文件属主查找文件 -user/nouser
-user username 按文件属主来查找
eg.
find / -user fred // 查找在系统中属于FRED这个用户的文件
find /home -user cnscn // 列出/home目录内属于用户cnscn的文件或目录
find /home -nouser // 列出/home内不属于本地用户的文件或目录
5.根据文件所属组查找文件 -group/-nogroup
-group groupname 按文件所属组来查找
eg.
find / -group cat // 查找在系统中属于 groupcat的文件
find /home -group cnscn // 列出/home内组为cnscn的文件或目录
find /home -nogroup // 列出/home内不属于本地组的文件或目录
6.根据文件类型查找文件 -tpye
-type b /d /c /p /l /f /s 查找是块设备、目录、字符设备、管道、符号链接、普通、socket文件
eg.
-type d // 查找当前目录下的目录
-type c // 查找当前目录下的字符设备文件
-type l // 查找当前目录下的符号链接文件
7.根据文件大小查找文件 -size
-size n[c] 查找长度为n块[或n字节]的文件
eg.
-size +1000000ct // 查找长度大于1Mb的文件
-size 100ct // 查找长度为100c的文件
-size +10 // 查找长度超过期作废10块的文件(1块=512字节)
-size +512k // 查找大于512k的文件
-size -512k // 查找小于512k的文件
当然了,find命令也可以和其他的命令一起复合使用,例如:
a.查当前目录下的所有普通文件
# find . -type f -exec ls -l {} \;
b.在/ l o g s目录中查找更改时间在5日以前的文件并删除
$ find logs -type f -mtime +5 -exec -ok rm {} \;
c.查询当天修改过的文件
[root@book class]# find ./ -mtime -1 -type f -exec ls -l {} \;
d.查询文件并询问是否要显示
[root@book class]# find ./ -mtime -1 -type f -ok ls -l {} \;
< ls … ./classDB.inc.php > ? y
-rw-r�r� 1 cnscn cnscn 13709 1月 12 12:22 ./classDB.inc.php
[root@book class]# find ./ -mtime -1 -type f -ok ls -l {} \;
< ls … ./classDB.inc.php > ? n
[root@book class]#
e.比如要查找磁盘中大于3M的文件:
find . -size +3000k -exec ls -ld {} ;
f.将find出来的东西拷到另一个地方
find *.c -exec cp ‘{}’ /tmp ‘;’
g.查找2004-11-30 16:36:37时更改过的文件
# A=`find ./ -name "*php"` | ls -l �full-time $A 2>/dev/null | grep "2004-11-30 16:36:37"