每一种操作系统都有成千上万的文件组成,对于linux这样“一切皆文件”的操作系统来说更不例外,大家应该都能很轻松使用windows下的文件查找功能,但是对linux这一功能可能并不是很熟悉,其实想玩linux的你更要牢牢掌握这个命令,因为linux不像windows那样有固定的文件名后缀,并且因为linux阵营下百家争鸣的特性,一个相同的文件在不同的发行版,可能会有不同,所以如果你能牢牢掌握find命令的使用,你在摸索linux的道路上将会顺利很多,同时你会发现linux下文件查找功能其实很简单,而且要比windows下查找功能强大很多很多!
locate是对其生成的数据库进行遍历(生成数据库的命令:updatedb),这一特性决定了用locate查找文件速度很快,但是locate命令只能对文件进行模糊匹配,在精确度上来说差了点简单介绍下它的两个选项:
#locate
-i //查找文件的时候不区分大小写 比如:locate -i passwd
-n //只显示查找结果的前n行 比如:locate -n 5 passwd
find在不指定查找目录的情况下是对整个系统进行遍历查找
path:要查找的目录路径。
~ 表示$HOME目录
. 表示当前目录
/ 表示根目录
-print:表示将结果输出到标准输出
-exec:对匹配的文件执行该参数所给出的shell命令
形式为command {} \; ,注意{}与\;之间有空格
ok:与exec作用相同
区别在于,在执行命令之前,会让用户确认是否执行
{}:替代查找到的文件
option常用的有一下几个选项:
-name 按照名字查找(精确查找)
find /etc -name "pass*" // * 表示 通配任意的单个或者多个字符
find /etc -name "pass?" // ? 表示 通配任意的单个字符
find /etc -name "[ab].sh" // [] 表示 通配括号内的任意一个字符 a.sh 或者 b.sh
find . -name "[A-Z]*" -print // 在当前目录下查找以大写字母开头的文件
find . -name "test*" -fprint file //在当前目录下查找以test开头的文件,并把结果输出到file中
find -name "ap*" -o -name "may*" //在当前目录下查找以ap或may开头的文件
find . -name "*.log" -mtime +5 -ok rm {} \;
//在当前目录下查找更改时间为5天之前的以.log结尾的文件并删除它们,
//在删除前进行询问提示。按y键删除文件,按n键不删除
find . -name "*.log" -exec mv {} .. \; //将查找到的文件移动到上一级目录
find . -type d | sort //查找当前所有目录并排序
-iname 按照文件名查找,不区分大小写
-perm 按照权限查找
find . -perm 755 //在当前目录下查找问价权限为755的文件
find . -perm -007 //在当前目录下查找所有用户都可读写执行的文件,同 -perm 777
find . -perm +222 //查找当前目录下任意一类用户(属主,属组,其他)匹配写权限的文件
-prune 不再当前指定的目录下查找
find . -path "test" -prune //在当前目录下查找但不在test目录下查找文件
find . -name "out*" -prune -o -name "*.txt" -print //在当前目录中查找不是out开头的txt文件
find test -path "test/test4" -prune -o -print
//在test目录下查找不在test/test4子目录之内的所有文件
find . \( -path test/test4 -o -path test/test3\) -prune -o -print
//避开多个文件夹,在当前目录下查找所有文件除了test/test4和test/test3下的文件
find . !-name "." -type d -prune -o -type f -name "*.txt" -print
//在当前目录,不在子目录中,查找txt文件
-user 文件属主来查找
find / -user arthur -type f -print //根目录下查找属主是www的文件
-group 文件所属组来查找
find / -group mysql -type f -print //根目录下查找属组mysql的文件
-nogroup 查找无有效所属组的文件,即文件的属组在/ect/groups中不存在
find / -nogroup -type f -print //根目录下查找用户组被删除的文件
-nouser 查找无有效属主的文件,即文件的属主在/ect/passwd中不存在
find / -nouser -type f -print //根目录下查找属主被删除的文件
-type 按照文件类型查找
b - 块设备文件
d - 目录
c - 字符设备文件
p - 管道文件
l - 符号链接文件
f - 普通文件
s - socket文件
find . -type l -print //在目录及其子目录下查找符号链接文件
find . ! -type d -print //在当前目录下查找除目录以外的所有类型的文件
find . -type f -exec ls -l {} \;
//匹配到当前目录下的所有普通文件,并使用ls -l命令将它们列出
find . -type f -mtime +14 -exec rm {} \;
//在目录中查找更改时间在14天之前的文件并删除它们
-mtime -n +n 按文件更改时间来查找文件,-n指n天以内,+n指n天以前(-mmin单位是分钟)
find . -mtime -2 -type f -print //查找两天内被修改过的文件
find . -mtime +2 -type f -print //查找两天前被修改过的文件
find -mmin -2 //查找两分钟内被修改过的文件
-atime -n +n 按文件访问的时间来查找文件(-amin)
find -atime -2 //查找两天内被访问过的文件
find -atime +2 //查找两天前被访问的文件
-ctime -n +n 按文件状态改变的时间来查找文件(-cmin),如文件修改,属性\属主 改变 ,节点 ,链接变化等
修改文件,-mtime 改了, -ctime 也会改.
访问文件,-atime 改了, -ctime 没变.
chown, chgrp, chmod,mv, 都会使 -ctime 改变,但不影响 -atime 和 -mtime.
touch 可以改 -mtime and/or -atime,但 touch -a 只改访问时间时,-ctime也改了.
touch -m 改修改时间时,-ctime当然也改了.
find -ctime -2 //查找两天内状态被改变的文件
find -ctime +2 //查找两天前状态被改变的文件
-depth 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找
find / -name "CON.FILE" -depth -print //从文件的根目录开始,查找一个名为CON.FILE的文件
find / -name "test.txt" -maxdepth 4 //从文件的根目录开始,查找test.txt,深度最多为4层
find / -name "test.txt" -mindepth 4 //从文件的根目录开始,查找test.txt,从第4层开始往下查
使用depth的原因:当在使用find命令向磁带上备份文件系统时,希望首先备份所有的文件,其次再备份子目录中的文件。
-size n:[c]查找文件长度为n块(一块等于512字节)的文件,带有c时表示文件长度以字节记
find . -size +1000c -print //查找当前目录大于1K的文件
find . -size +1000000c -print //查找当前目录大于1M的文件
find . -size 100c -print //查找当前目录下刚好为100字节的文件
find . -size -1000c -print //查找当前目录下小于1K的文件
find . -size +10 -print //在当前目录下查找大于10块的文件
-ftype 查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息
find . -name "test.txt" -ftype vfat //在当前目录下查找文件系统类型为vfat名为test.txt的文件
find . -name "test.txt" ! -ftype vfat //在当前目录下查找文件系统类型不为vfat名为test.txt的文件
-newer f1 !f2 查找更改时间比f1新但比f2旧的文件
find . -newer test2.txt //在当前目录下查找更新时间比test2.txt新的文件
find . -anewer test2.txt //在当前目录下查找存取时间比test2.txt新的文件
-mount 在查找文件时不跨越文件系统mount点(不进入其他文件系统)
find . -name "*.XC" -mount -print //在当前目录开始查找位于本文件系统中文件名以XC结尾的文件
-follow 如果find命令遇到符号链接文件,就跟踪至链接所指向的文件
-cpio 对匹配的文件使用cpio命令,将这些文件备份到磁带设备中
其他:
find . -used -2 //查找文件或目录在2天内被改动过的文件
find . -uid +501 //列出当前目录内用户的识别码大于501的文件或目录
find . -gid 500 //列出当前目录内组id为500的文件或目录
find . -links +2 //查找硬链接数大于2的文件或目录
find . -empty //查找系统中为空的文件或者文件夹
find . -name "*.c" | xargs chmod 700 //使用xargs来对查找到的文件进行进一步的操作
Linux命令参考