find命令总结
find 用来在指定目录下查找文件、目录。默认在当前目录下查找子目录与文件,并打印找到的子目录和文件,不设置任何参数时,find 将显示当前目录中所有子目录与文件(包含隐藏文件)。
相对于 locate 命令,find命令进行实时查询,查找速度较慢
语法: find path -option [ -print ] [ -exec -ok command ] {} \;
path 查找的路径,查找多个目录时,目录用空格分开,默认在当前目录中查找。
ipath 同path,但忽略字符大小写,不常用;
print 将匹配的文件输出到标准输出,默认项。
exec 对匹配的文件、目录,执行该参数所给出的命令,注意 { } 和 \;之间的空格,{}中的内容并非一次引用所有的搜索出的内容,而是一行一行引用,接tar 命令时,每一个查找到的文件都有一个tar包。
例:find -name “a.conf” -exec cp {} {}.ori \; #将文件 a.conf 备份为 a.conf.ori
ok 和-exec作用相同,但在执行每一条命令之前,会给用户提示是否执行该命令。
-name 查找的文件名,常配合通配符使用
-iname 查找的文件名,不区分大小写
-perm 文件权限
-perm 664 权限完整匹配,查找权限为644的文件或目录,
-perm /u+w,g+w 权限部分匹配,用户,用户组有写权限,g+w与g=w作用相同
-type 文件类型,f 为普通文件,d 为目录文件,l 为链接文件,b为块设备文件,c为字符设备文件,p为/管道文件,s 为socket文件
-size 文件大小
-size +2M 大于2M的文件
-size -2M 小于2M的文件
-size 2M 大小为2M的文件
-mmin 文件修改时间(单位分钟)
-mtime 文件修改日期(单位填)
-mtime + 2 2天以前修改的文件
-mtime - 2 2天以内修改的文件
-mtime 2 前第2天修改的文件
-ctime 文件属性更改日期(单位天) File's status was changed
-cmin 文件属性更改时间(单位分钟)
-atime 最近一次访问日期(单位填)
-amin 最近一次访问时间(单位分钟)
-anewer 文件最近一次的访问时间早于最近一次的修改时间(File was last accessed more recently than file was modified. );
-cnewer 文件属性的改动时间早于文件的修改时间( File's status was last changed more recently than file was modified. )
-newer 某一文件的修改时间早于另一个文件(File was modified more recently than file. );
-user 查找属主为指定用户(UID)的文件 、
-group 查找属组为指定组(GID)的文件
-uid 查找属主为指定的UID号的文件
-gid 查找属组为指定的GID号的文件
-nouser 查找没有属主的文件
-nogroup 查找没有属组的文件
-maxdepth 设置最大目录层级;
-mindepth 设置最小目录层级;
find -mtime -1 -type f #查找当前目录下一天内修改的,文件类型为文件
find -name "[A-Z]*" -type d #当前目录中,查找以大写字母开头的目录
find /etc -name "passwd*" -type f -exec grep "test" {} \; #查看是否存在 test 用户,在/etc目录中查找passwd开头的文件,并在文件中筛选test
find -name "[a-z][a-z][0–9][0–9].txt" #查以两个小写字母和两个数字开头的txt文件
find /var/log -type f -mtime +7 -ok rm {} \; #查找/var/log目录中更改时间在7日以前的普通文件,并在删除之前询问它们
find /home -name "*.t?t" # *表示通配任意个字符 ?表示通配单个字符
find /home -name "*.t?t" |wc -l #统计查找到的文件或目录数量
find -name "*.gz" -exec rm {} \; #删除查找到的.gz文件,删除前不提示
find -name "*.gz" -ok rm {} \; ##删除查找到的.gz文件,删除前会提示
组合条件:与:-a , 或:-o , 非: -not 、 ! 默认参数见为“与”,或、非需指定
find -name "data*" ! -type f #查找名字以data开头,文件类型不为文件
find -name "[A-D]*" -o -type d #查找名字以A-D的大写字母开头,或文件类型为目录