Chinaunix首页 | 论坛 | 博客
  • 博客访问: 433899
  • 博文数量: 62
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 740
  • 用 户 组: 普通用户
  • 注册时间: 2015-05-10 21:59
个人简介

付出,终有回报!

文章分类

全部博文(62)

文章存档

2018年(6)

2017年(24)

2016年(6)

2015年(26)

分类: 系统运维

2018-05-29 15:42:17

find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

一、命令格式:

find path -option [ -print ] [ -exec -ok command ] {} \;

-print      将查找到的文件输出到标准输出 
-exec command {} \;      将查到的文件执行command操作,{} 和 \;之间有空格 
-ok      和-exec相同,只不过在操作前要询用户

二、常用参数

===================================================== 
-name filename      #查找名为filename的文件 
-perm      #按执行权限来查找 
-user username      #按文件属主来查找 
-nouser      #查无有效属主的文件,即文件的属主在/etc/passwd中不存 
-group groupname      #按组来查找 
-nogroup      #查无有效属组的文件,即文件的属组在/etc/groups中不存在 
-mtime -n +n      #按文件更改时间来查找文件,-n指n天以内,+n指n天以前 
-atime -n +n      #按文件访问时间来查GIN: 0px”>

-ctime -n +n      #按文件创建时间来查找文件,-n指n天以内,+n指n天以前 
-type b/d/c/p/l/f      #查是块设备、目录、字符设备、管道、符号链接、普通文件 
-size n[c]      #查    长度为n块[或n字节]的文件 
-depth      #使查找在进入子目录前先行查找完本目录

=====================================================

实例

1、根据文件或者正则表达式进行匹配

在当前目录及子目录中,查找大写字母开头的txt文件 
find . -name '[A-Z]*.txt' -print

在当前目录及子目录中,查找不是out开头的txt文件 
find . -name "out*" -prune -o -name "*.txt" -print

基于正则表达式匹配文件路径 
find . -regex ".*\(\.txt|\.pdf\)$"

打印test文件名后,打印test文件的内容 
find ./ -name test -print -exec cat {} \;

不打印test文件名,只打印test文件的内容 
find ./ -name test -exec cat {} \;

2、根据文件类型搜索

find . -type 类型参数 
类型参数列表: 
f     普通文件 
l      符号连接 
d     目录 
c     字符设备 
b     块设备 
s     套接字 
p     Fifo

查找目录并列出目录下的文件(为找到的每一个目录单独执行ls命令,没有选项-print时文件列表前一行不会显示目录名称) 
find ./ -type d -print -exec ls {} \;

3、根据文件时间戳进行搜索

UNIX/Linux文件系统每个文件都有三种时间戳:

访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。 
修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间。 
变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。

搜索最近七天内被访问过的所有文件 
find . -type f -atime -7

搜索恰好在七天前被访问过的所有文件 
find . -type f -atime 7

搜索超过七天内被访问过的所有文件

find . -type f -atime +7 

4、根据文件大小进行匹配

文件大小单元:

b —— 块(512字节) 
c —— 字节 
w —— 字(2字节) 
k —— 千字节 
M —— 兆字节 
G —— 吉字节

搜索大于10KB的文件 
find . -type f -size +10k

搜索小于10KB的文件 
find . -type f -size -10k

搜索等于10KB的文件 
find . -type f -size 10k

5、根据文件权限/所有权进行匹配

当前目录下搜索出权限为777的文件 
find . -type f -perm 777

找出当前目录下权限不是644的php文件 
find . -type f -name "*.php" ! -perm 644

找出当前目录用户tom拥有的所有文件 
find . -type f -user tom

找出当前目录用户组sunk拥有的所有文件 
find . -type f -group sunk

6、其他例子

查找当前目录下所有.txt文件并把他们拼接起来写入到all.txt文件中 
find . -type f -name "*.txt" -exec cat {} \;> all.txt

将30天前的.log文件移动到old目录中 
find . -type f -mtime +30 -name "*.log" -exec cp {} old \;

在/ l o g s目录中查找更改时间在5日以前的文件并删除它们: 
$ find /logs -type f -mtime +5 -exec -ok rm {} \;

在/tmp中查找所有的*.h,并在这些文件中查找“SYSCALL_VECTOR”,最后打印出所有包含”SYSCALL_VECTOR”的文件名 
find /tmp -name "*.h" -exec grep "SYSCALL_VECTOR" {} \; -print

在当前目录,不再子目录中,查找txt文件 
find . ! -name "." -type d -prune -o -type f -name "*.txt" -print

查找比aa.txt新的文件 
find . -newer "aa.txt" -type f -print

查找aa.txt 并备份为aa.txt.bak 
find . -name 'aa.txt' -exec cp {} {}.bak \;

查找aa.txt 归档压缩为aa.txt.tar.gz 并删除aa.txt 
find . -name "aa.txt" -type f -exec tar -zcvf {}.tar.gz {} \; -exec rm -rf {} \; > /dev/null

阅读(2172) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~