爱生活,爱阅读
分类: LINUX
2012-01-10 16:51:53
Find 命令
今天浏览了下linux下find 的man文档,涉及的细节很多,仅把常用的部分整理出来,供后续丰富补充吧。
Find命令功能:
在一个目录结构中查找文件,正如其名
Find命令格式:
Usage: find [path...] [expression]
path默认为当前路径,expression默认为-print项
Expressions有以下几种组成 :Option,Tests,Action,Operators,分别简单列举其常见形式:
Options:
-:在处理子目录之前先处理本目录中的内容
-daystart:(-atime,-ctime,-mtime;-amin,-cmin,-mmin)
-atime :文件访问时间,以天为单位。
-atime -n:n天之内被访问
-atime +n:n天之前被访问
-atime n:第n天被访问
-ctime :文件创建时间,以天为单位
-ctime -n:n天之内被创建
-ctime +n:n天之前被创建
-ctime n:第n天被创建
-mtime :文件更改时间,以天为单位
-mtime -n:n天之内被更改
-mtime +n:n天之前被更改
-mtime n:第n天被更改
-amin:同-atime,不同的是单位为分钟
-cmin:同-ctime,不同的是单位为分钟
-mmin:同-mtime,不同的是单位为分钟
-nogroup:查找文件没有有效用户组文件(某用户建立了文件/文件夹,后,该用户组又通过groupdel删除掉了)
-nouser:查找文件没有有效用户属主文件(某用户建立文件/文件夹,后,该用户被userdel删除)
Tests:
+n:Greater than n;n天(分钟)之前
-n:Less than n;n天(分钟)之内
n:exact n;n天(分钟)
-anewer file:访问时间比file访问时间更近的文件
-cnewer file:创建时间比file创建时间更近的文件
-newer file:更改时间比file更改时间更近的文件
-name pattern:查找pattern模式的文件
-path pattern:指定pattern的路径查找
-perm mode:按照指定mode的权限查找文件
-size n[bcwkMG]:按照指定大小查找文件
b:512 bytes block
c:bytes
w:two-byte word
k:1024 bytes
M:1024*1024 bytes
G:Gigabityes
-type :按照文件类型查找
b:block:块
c:character:字符
d:dir:目录
f:regular file:常规
l:symb link:链接
-maxdepth level:指定文件夹最大级别之内查找
-mindepth level:指定文件夹最小级别之外查找
ACTIONS:
-delete :删除文件
-exec command:执行shell指令
-fprint0 file:将查找结果输出到file,结果以‘\0’间隔
-fprint file:将查找结果输出到file,结果以换行间隔
-prune:查找时忽略指定的目录及其子目录
-ls:执行ls命令
OPERATORS:
EXP1 –and EXP2
EXP1 –or EXP2
举例:
1、 在当前目录下查找指定文件,并在stdout上输出:
[admin@localhost ~]$find . –name pattern.c –print
-------------在当前目录及其子目录下查找pattern.c文件,并在stdout上显示结果
2、 在指定目录下查找某类型文件,并通过ls显示文件属性:
[admin@localhost ~]$find /home/admin –name “*.c” –type f –exec ls –l {} \;
-------------在/home/admin 下查找扩展名为.c的常规文件,并查看其属性
3、 查找指定大小, 指定若干天(分钟),前,后,指定类型的文件并删除:
[admin@localhost ~]$find /home –name “*.tmp” – type f –size 10k –mtime 5 –print –exec rm –rf {} \;
-------在home及其子目录下查找扩展名为.tmp 文件大小为10k修改时间为5天的文件,在stdout上显示后删除
4、 在指定目录中查找文件,但不在其指定的子目录中查找
[admin@localhost ~]$find /home/admin -path "/home/admin/.vim" -name "*.vim" –prune
-------在/home/admin及其子目录下查找*.vim 类型的文件,但不在其子目录.vim中查找
[admin@localhost ~]$find . –name “*.tmp” –size 0 –type f –print –exec rm –rf {} \;
--------------当前目录及子目录下查找并删除大小为0,扩展名为tmp的常规文件
5,、仅在指定文件夹中查找特定文件,但不在其子目录中查找
[admin@localhost ~]$find / -maxdepth 1 -type d -size -100c
---------在/目录下查找目录文件,该目录文件大小小于100字节,仅查找当前目录,不在其子目录中查找
6、在指定目录的若干级子目录中查找
[admin@localhost ~]$find /home/admin -maxdepth 3 –type f –size 0 –exec rm {} \;
-----------在/home/admin目录下超找大小为0字节的文件,最多查找三级目录,且将符合要求的普通文件并删除
7、查找指定类型文件
[admin@localhost ~]$find /mnt/hgfs/ -type l –print
----------------------在/mnt/hgfs/目录及其子目录下查找链接文件
8、在根目录下查找xml扩展名属于用户admin其大小为0的普通文件并删除
[admin@localhost ~]$ find / -name "*.xml" -user admin -type f -size 0 –print –exec –rm {} \;
9、查找非特定类型的文件
[admin@localhost ~]$find / !-type d -print
------在根目录及其子目录下查找非目录文件,并于stdout上输出查询结果
10、另一种方式删除10天前size 为0的文件方式
[admin@localhost ~]$find ./ -size 0 –mtime +10 | xargs rm -f &
-----------当前目录及子目录下查找大小为0,十天前修改过的文件并删除之
11、查找权限位为755的普通文件
[root@localhost ~]# find . -perm 755 -type f -print
-----------当前目录及子目录下查找普通文件并在标准stdout上输出,该文件的权限为0755,
如果其他文件属性符合要求,但其他的bit位不符合,则不会被列出。
12、如下
[admin@localhost ~]$find . -perm -741 -type f -print
-----------当前目录及子目录下查找普通文件并在标准stdout上输出,该文件owner具有读写执行
权限,本组用户有读权限,其他用户有执行权限。如果文件的其他bit位不是上述所列,也会
被输出,如另一个文件的属性为0773。
13、如下
[admin@localhost ~]$find . -perm -444 -perm /222 ! -perm /111
--------当前目录及子目录中查找文件访问权限为:对所有用户均可读,且至少是可写的(无论对owner,group,或者other),但均不可执行。
14、如下
[admin@localhost ~]$find /HOME/admin/log -type f -mtime +3 -exec -ok rm {} \;
--------------在/HOME/admin/log目录中查找更改时间在3日以前的文件并删除它们: