Linux下find命令

来源:互联网 发布:华为手机记录运动数据 编辑:程序博客网 时间:2024/06/09 23:25
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文件系统中的每个文件都有三种时间戳

 1. 访问时间(atime——access time):就是上次访问这个文件的时间。
 2. 改变时间(ctime——change time):就是文件的inode改变的时间(什么是inode?)当你往一个文件中添加数据或者删除数据的时候,修改文件所有者的时候,链接改变的时候,文件的ctime就会发生改变。
 3. 修改时间(mtime——modification time):就是文件的内容上一次发生改变的时候的时间。


1)
[admin@bogon ~]$ find -type f -atime -2


2)[admin@bogon ~]$ find -atime +10


3)find ./ -newer test.c   查找比test.c还要新的文件


1 0