Linux下find命令在目录结构中搜索文件,并执行指定的操作。Linux下find命令提供了很多的查找条件,功能非常强大。
1.命令格式:
find pathname -options [-print -exec -ok ...]
2.命令功能:
用于在文件树中查找文件,并作出相应的处理(可能访问磁盘)
3.命令参数:
pathname: find命令所查找的目录路径,例如:用.来表示当前目录,用/来表示系统目录
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令将匹配的的文件执行该参数所给出的shell命令,相应命令的形式为'command' { } \;,注意{ }和\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
options常用的有如下选项:
-name: 按照名字查找
-perm: 按照文件权限来查找文件
-prune: 不在当前指定的目录下查找。
-user: 按照文件属主来查找文件
-group: 按照文件多数的组来查找文件
-mtime -n +n :按照文件的更改时间来查找文件,-n表示文件更改时间距现在n天以内, +n表示文件更改时间距现在n天以前。
-nogroup: 查找无有效所属组的文件,即该文件所属组在etc/group中不存在
-nouser : 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在
-type : 查找某一类型的文件
下面通过一些简单的例子来介绍find的常规用法
1.按名字查找
1)查找文件名为test.c的文件
[admin@bogon ~]$ find -name test.c
./test.c
[admin@bogon ~]$
2)查找文件名包含 test 的文件
[admin@bogon ~]$ find -name 'test'
./test
./BIT/test
3)在$HOME目录及其子目录中,查找所有文件
admin@bogon ~]$ find ~ -name '*' -print
4)具有条件的查找
-a 与条件
-o 或条件
-not 非条件(此参数的功能类似于否定参数‘!’)
1)
[admin@bogon ~]$ find -name "t*" -a -name "*.c" //查找以t为开头,以.c为结尾的文件
./test.c
[admin@bogon ~]$
2)
[admin@bogon ~]$ find -name "t*" -o -name "*.c" //查找以t开头或者以.c为结尾的文件
./test.c
./test
./.gnupg/trustdb.gpg
./BIT/test
./BIT/test-bak
./.gconf/apps/nautilus/desktop-metadata/trash
./.gconf/apps/panel/applets/trash_applet
[admin@bogon ~]$
3)用!来表示找到不以.c为结尾的文件
[admin@bogon ~]$ find ./ ! -name '*.c' -print
4)找到不以.c为结尾的文件
[admin@bogon ~]$ find ./ not -name '*.c' -print
./test.c
find: `not': No such file or directory
[admin@bogon ~]$ find -name "t*" -not -name "*.c"
./test
./.gnupg/trustdb.gpg
./BIT/test
./BIT/test-bak
./.gconf/apps/nautilus/desktop-metadata/trash
./.gconf/apps/panel/applets/trash_applet
[admin@bogon ~]$
2.根据文件类型搜索:
普通文件 f
符号文件 l
目录 d
字符设备 c
块设备 b
套接字 s
管道文件 p
3.根据文件大小
-size
通过-size选项可以通过文件大小查找文件。
-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
b——块(512字节); c——字节; w——字(2字节);
k——千字节 ; M——兆字节; G——吉字节。
[admin@bogon ~]$ find -size +18k 查找比18k大的文件
[admin@bogon ~]$ find -size -18k 查找比18k小的文件
4.按照文件深度进行查找
-maxdepth
-mindepth
用来限定搜索指定目录的深度。
1)在root目录以及子目录下查找文件名为test的文件
2) find -maxdepth 2 -name test 在root目录以及深度为1的子目录中查找文件名为test的文件
3)find -mindepth 1 -maxdepth -name test 在深度为0的子目录以及深度为5的子目录中查找文件
名为test的文件
5.根据文件权限来查找
-perm
find -perm 664
6.按照文件时间进行查找
linux文件系统中的每个文件都有三种时间戳:
访问时间(atime——access time):就是上次访问这个文件的时间。
2. 改变时间(ctime——change time):就是文件的inode改变的时间(什么是inode?)当你往一个文件中添加数据或者删除数据的时候,修改文件所有者的时候,链接改变的时候,文件的ctime就会发生改变。
修改时间(mtime——modification time):就是文件的内容上一次发生改变的时候的时间。
1)
[admin@bogon ~]$ find -type f -atime -2
2) [admin@bogon ~]$ find -atime +10
3)find ./ -newer test.c 查找比test.c还要新的文件