forked from aqzt/kjyw
-
Notifications
You must be signed in to change notification settings - Fork 0
/
find.sh
173 lines (146 loc) · 7.17 KB
/
find.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
#!/bin/bash
## gitlab_rpm 2016-05-16
## http://www.aqzt.com
##email: [email protected]
##robert yu
##centos 6和centos 7
##运维就是踩坑,踩坑的最高境界就是:踩遍所有的坑,让别人无坑可踩!
#find . {-atime/-ctime/-mtime/-amin/-cmin/-mmin} [-/+]num
#atime:访问时间(access time),指的是文件最后被读取的时间,可以使用touch命令更改为当前时间;
#ctime:变更时间(change time),指的是文件本身最后被变更的时间,变更动作可以使chmod、chgrp、mv等等;
#mtime:修改时间(modify time),指的是文件内容最后被修改的时间,修改动作可以使echo重定向、vi等等;
#第一个参数,.,代表当前目录,如果是其他目录,可以输入绝对目录和相对目录位置;
#第二个参数分两部分,前面字母a、c、m分别代表访问、变更、修改,后面time为日期,min为分钟,注意只能以这两个作为单位;
#第三个参数为量,其中不带符号表示符合该数量的,带-表示符合该数量以后的,带+表示符合该数量以前的。
#找/data目录下一小时之前文件删除
find /data -mmin +60 -exec rm -f {} \;
#在当前目录下查找以april开始的文件
find -name april*
#在当前目录下查找以april开始的文件,并把结果输出到file中
find -name april* fprint file
#查找以ap或may开头的文件
find -name ap* -o -name may*
#在/mnt下查找名称为tom.txt且文件系统类型为vfat的文件
find /mnt -name tom.txt -ftype vfat
#在/mnt下查找名称为tom.txt且文件系统类型不为vfat的文件
find /mnt -name t.txt ! -ftype vfat
#在/tmp下查找名为wa开头且类型为符号链接的文件
find /tmp -name wa* -type l
#在/home下查最近两天内改动过的文件
find /home -mtime -2
#查1天之内被存取过的文件
find /home -atime -1
#在/home下查60分钟前改动过的文件
find /home -mmin +60
#查最近30分钟前被存取过的文件
find /home -amin +30
#在/home下查更新时间比tmp.txt近的文件或目录
find /home -newer tmp.txt
#在/home下查存取时间比tmp.txt近的文件或目录
find /home -anewer tmp.txt
#列出文件或目录被改动过之后,在2日内被存取过的文件或目录
find /home -used -2
#列出/home目录内属于用户cnscn的文件或目录
find /home -user cnscn
#列出/home目录内用户的识别码大于501的文件或目录
find /home -uid +501
#列出/home内组为cnscn的文件或目录
find /home -group cnscn
#列出/home内组id为501的文件或目录
find /home -gid 501
#列出/home内不属于本地用户的文件或目录
find /home -nouser
#列出/home内不属于本地组的文件或目录
find /home -nogroup
#列出/home内的tmp.txt 查时深度最多为3层
find /home -name tmp.txt -maxdepth 4
#从第2层开始查
find /home -name tmp.txt -mindepth 3
#查找大小为0的文件或空目录
find /home -empty
#查大于512k的文件
find /home -size +512k
#查小于512k的文件
find /home -size -512k
#查硬连接数大于2的文件或目录
find /home -links +2
#查权限为700的文件或目录
find /home -perm 0700
#查/tmp 的tmp.txt并查看
find /tmp -name tmp.txt -exec cat {} \;
#查/tmp 的tmp.txt并删除
find /tmp -name tmp.txt -ok rm {} \;
# 查找在系统中最后10分钟访问的文件
find / -amin -10
# 查找在系统中最后48小时访问的文件
find / -atime -2
# 查找在系统中为空的文件或者文件夹
find / -empty
# 查找在系统中属于 groupcat的文件
find / -group cat
# 查找在系统中最后5分钟里修改过的文件
find / -mmin -5
#查找在系统中最后24小时里修改过的文件
find / -mtime -1
#查找在系统中属于作废用户的文件
find / -nouser
#查找在系统中属于FRED这个用户的文件
find / -user fred
#查当前目录下的所有普通文件
find . -type f -exec ls -l {} \;
##在/logs目录中查找更改时间在5日以前的文件并删除它们:
find logs -type f -mtime +5 -exec -ok rm {} \;
##匹配字符串,找出存在字符串文件
find /data -name "*.php" -type f -print0|xargs -0 egrep "(phpspy|c99sh|milw0rm|eval\(base64_decode|spider_bc)"|awk -F: '{print $1}'|sort|uniq
find /data -name "*.php" -type f -print0|xargs -0 egrep "aaa"|awk -F: '{print $1}'|sort|uniq
find . -name "*.php" -type f -print0| xargs -0 egrep "aaa|bbb"| egrep "aaa"
find . -name "*.php" | xargs grep "aaa"
##cd /var/cache/yum找*.rpm移动到一个文件夹
find . -name "*.rpm" -exec cp {} /root/111 \;
##找到*.log日志全部删除
find . -name *.log | xargs rm
find . -name *.rpm | xargs rm
find /data/file1 -name .svn -print0 | xargs -0 rm -r -f
find /data/file1 -name .git -print0 | xargs -0 rm -r -f
#删除5天之前的日志
find /data/nginx/log/ -ctime +5 -exec rm -f {} \;
find /data/logs -ctime +5 -exec rm -f {} \;
find /data/logs -name "localhost_access_log*.txt" -type f -mtime +5 -print -exec rm -f {} \;
find /data/zookeeper/logs -name "log.*" -type f -mtime +5 -print -exec rm -f {} \;
##删除目录下所有的 .svn 隐藏子目录
find . -name .svn -print0 | xargs -0 rm -r -f
find /data/file1 -name .svn -print0 | xargs -0 rm -r -f
find /data/file1 -name .git -print0 | xargs -0 rm -r -f
find . -name .svn -print0 | xargs -0 rm -r -f
find . -name .git -print0 | xargs -0 rm -r -f
##找出 n 天前的文件
find /temp/ -type f -mtime +n -print
##注:/temp/ 指出寻找/temp/目录下的文件
##-type f 指出找系统普通文件,不包含目录文件
##-mtime +n 指出找 n*24 小时前的文件
##-print 将找出的文件打印出来
##如:找出 7 天前的文件
find /temp/ -type f -mtime +7 -print
##找出 3 天前的文件
find /temp/ -type f -mtime +3 -print
##找出并删除 7 天前的文件
find /temp/ -type f -mtime +7 -print -exec rm -f {} \;
find /temp/ "ut*.log" -type f -mtime +7 -print -exec rm -f {} \;
##注:-exec 指出要执行后面的系统命令
##rm -f 删除找出的文件
##{} 只有该符号能跟在命令后面
##\ 结束符
##也可以使用 xargs 代替 -exec
find /temp/ -type f -mtime +7 -print | xargs rm -f
##find命令用途举例:
##如:
##查找/var下最大的前10个文件:
find /var -type f -ls | sort -k 7 -r -n | head -10
##查找/var/log/下大于5GB的文件:
find /var/log/ -type f -size +5120M -exec ls -lh {} \;
##找出今天的所有文件并将它们拷贝到另一个目录:
find /home/me/files -ctime 0 -print -exec cp {} /mnt/backup/{} \;
##找出所有一周前的临时文件并删除:
find /temp/ -mtime +7-type f | xargs /bin/rm -f
##查找所有的mp3文件,并修改所有的大写字母为小写字母:
find /home/me/music/ -type f -name *.mp3 -exec rename ‘y/[A-Z]/[a-z]/’ ‘{}’ \;