find查询命令

find 所带的参数,能实现哪些功能
find 命令选项
pathname: find 命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find 命令将匹配的文件输出到标准输出。
-exec: find 命令对匹配的文件执行该参数所给出的s h e l l 命令。相应命令的形式为'
command' {} \;,注意{ }和\;之间的空格。
-ok: 和- e x e c 的作用相同,只不过以一种更为安全的模式来执行该参数所给出的s h e l l
命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

-name:按照文件名查找文件。
-perm:按照文件权限来查找文件。
-prune:使用这一选项可以使f i n d 命令不在当前指定的目录中查找,如果同时使用-depth
选项,那么-prune 将被f i n d 命令忽略。
-user: 按照文件属主来查找文件。
-group:按照文件所属的组来查找文件。
-mtime -n +n:按照文件的更改时间来查找文件, - n 表示文件更改时间距现在n 天以内,
+ n 表示文件更改时间距现在n 天以前。F i n d 命令还有- a t i m e 和- c t i m e 选项,但
它们都和- m t i m e 选项。
-nogroup:查找无有效所属组的文件,即该文件所属的组在/ e t c / g r o u p s 中不存在。
-nouser:查找无有效属主的文件,即该文件的属主在/ e t c / p a s s w d 中不存在。
-newer file1 ! file2:查找更改时间比文件f i l e 1 新但比文件f i l e 2 旧的文件。

1,find基础匹配

在有些操作系统中只允许- e x e c 选项执行诸如l s 或ls -l 这样的命令)。大多数用户使用这
一选项是为了查找旧文件并删除它们。建议在真正执行r m 命令删除文件之前,最好先用l s
命令看一下,确认它们是所要删除的文件。
e x e c 选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一个\,最后是
一个分号。 

1) f i n d 命令匹配到了当前目录下的所有普通文件,并在- e x e c 选项中使用ls-l 命令将它们列出 :  find . -type f -exec ls -l {} \;

2)在/ l o g s 目录中查找更改时间在5 日以前的文件并删除它们:find logs -type f -mtime +5 -exec rm {} \; (比较危险的删除方法)

3)f i n d 命令在当前目录中查找所有文件名以. L O G 结尾、更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示 : find . -name "*.conf" -mtime +5 -ok rm {} \; (安全删除方法)

4) 查询在当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件,可以用: find . -type f -perm 644 -exec ls -l {} \;

5)为了查找系统中所有文件长度为0 的普通文件,并列出它们的完整路径,可以用 : find / -type f -size 0 -exec ls -l {} \;

6)为了查找系统中所有属于root 组的文件,可以用: find . -group root -exec ls -l {} \;

7)在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log :   find . -name "file*" -print | xargs echo "" > /tmp/core.log (当前目录) 
   在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log :   find / -name "core" -print | xargs echo "" >/tmp/core.log(全局查找)

8)用 g r e p 命令在所有的普通文件中搜索hostname 这个词:find . -type f -print | xargs grep "hostname"

 

2.find文件查询

1)如何查找大小为500K到1000K之间的文件: find -type f -size +500k -and -size -1000k

2)如何查找大小为5M到100M之间的文件: find -type f -size +5M -and -size -100M

3)在当前目录下查找长度超过1 0 块的文件: find . -size +10 -print

4)在/ h o m e / a p a c h e 目录下查找文件长度恰好为1 0 0 字节的文件 find /home/apache -size 100c -print

5)在/ e t c 目录下查找所有的符号链接文件,可以用 : find /etc -type l -print

6)在当前目录下查找文件长度大于1 M 字节的文件: find . -size +1000000c -print

6)为了在/ v a r / a d m 目录下查找更改时间在3 日以前的文件 :find /var/adm -mtime +3 -print

希望在系统根目录下查找更改时间在5 日以内的文件,可以用: find / -mtime -5 -print 

8)find使用group 和nogroup 选项

在/ a p p s 目录下查找属于gem 用户组的文件,可以用: find /apps -group gem -print

要查找没有有效所属用户组的所有文件,可以使用n o g r o u p 选项。下面的f i n d 命令从文件系统的根目录处查找这样的文件 : find / -nogroup-print

9)find使用user 和nouser 选项

1.为了查找属主帐户已经被删除的文件,可以使用- n o u s e r 选项。这样就能够找到那些属主
在/ e t c / p a s s w d 文件中没有有效帐户的文件 在使用- n o u s e r 选项时,不必给出
用户名; f i n d 命令能够为你完成相应的工作。

 find /home -nouser -print

2.在/ e t c 目录下查找文件属主为u u c p 的文件
find /etc -user uucp -print

3.按文件属主查找文件,如在$ H O M E 目录中查找文件属主为sam 的文件,可以用:
代码:
$ find ~ -user sam -print

10)find 命令将删除当目录中访问时间在7 日以来、含有数字后缀的admin.log 文件  :find . -name "admin.log[0-9][0-9][0-9]" -atime -7 -ok rm {} \;

3、忽略某个目录进行查询

如果在查找文件时希望忽略某个目录,因为你知道那个目录中没有你所要查找的文件,那么可以
使用- p r u n e 选项来指出需要忽略的目录。在使用- p r u n e 选项时要当心,因为如果你同
时使用了- d e p t h 选项,那么- p r u n e 选项就会被f i n d 命令忽略。
如果希望
在/ a p p s 目录下查找文件,但不希望在/ a p p s / b i n 目录下查找,可以用:find /apps -path "/apps/bin" -prune -o -print

在/usr/sam 目录下查找不在dir1 子目录之内的所有文件 可以用: find /usr/sam -path "/usr/sam/dir1" -prune -o -print