3.4 find查找命令
3.4.1 语法
用法: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path…] [expression]
默认路径为当前目录;默认表达式为 –print
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path…] [expression]
3.4.2 简单示例
- 【find /tmp/ -name “*”】在tmp目录下查找所有文件和目录(查找范围包含子目录)
- 【find / -maxdepth 1 -name “*”】
查找根目录下,所有文件,不像下延伸,即只查找根目录下的文件和文件夹(相当于指定目录下的一级目录,不在其子目录中查找)。 - 同理示例
- 【find ./ -maxdepth 1 -name “a*”】在当前目录下最多延伸到当前目录(即不延伸子目录查找)查找以a开头的文件和文件夹
- 【find ./ -maxdepth 3 -mindepth 2 -name “a*”】在当前目录下面向下延伸2级,最多延伸至3级目录。查找文件名以a开头的文件和目录
- 【find -user root】在当前目录下面查找root用户所建立的文件或文件夹
3.4.3 常用参数
3.4.3.1 匹配标准参数
- 【-name ‘FILENAME’】:对文件名做精确匹配
文件名通配符为:{*|?|[]}
- 【*】表示配置任意长度的任意字符
- 【?】表示匹配任意的字符(只占一个字符)
- 【[]】组合,只匹配组合中的一种情况()
例如:【find -name ‘[b,c]’】在当前目录下查找,只匹配首字母为a或者b的文件或者文件夹
- 【-iname ‘FILENAME’】:表示文件名匹配不区分大小写
- 【-regex PATTERN】:基于正则表达式进行文件名匹配匹配
- 【-user USERNAME】:基于文件的属主名来查找
- 【-group GROUPNAME】:根据属组名来查找
- 【-uid UID】:根据属主的id号来查找
- 【-gid GID】:根据属组的id号来查找
- 【-nouser】:查找没有属主的文件
- 【-nogroup】:查找没有属组的文件
- 【-size】:根据文件大小查找
#k,#M,#G 如果没指定单位默认是字节
[+|-]#k //如果+10k表示查找大于10k的文件,如果是-10k查询小于10k的文件
例如:find /etc –size 10k –ls 表示查询文件在10k~9k的文件 - 【-type】:根据文件类型查找
常用文件类型有
- f:普通文件
- d:目录文件
- c:字符文件
- b:块文件
- l:符号链接文件
- p:管道设备文件
- s:套接字设备文件
例如: find /tmp/ -type d //表示查询tmp目录下的所有为目录的文件(查询目录)
3.4.3.2 组合查找参数
- 【-a】相当于&&,且
- 【-o】相当于||,或
- 【-not】相当于!,非
例如:
【find /tmp –nouser –a –type d -ls】查询tmp目录下面没有属组并且为目录的文件(ls 表示详细显示查询到文件信息)
【find /tmp –nouser -o –d -ls】查询tmp目录下面没有属组的文件,或者只是目录的目录文件
例如:/tmp/test目录下,属主不是user1,也不是user2的文件
【find /tmp/test –not (-user user1 –o –user user2 ) -ls】
3.4.3.3 根据文件时间戳查找参数
- 【-mtime】:根据文件的修改时间查找
- 【-ctime】:根据文件的改变时间
- 【-atime】:根据文件的访问时间
【+|-】#也支持
+5 离现在为止,至少有5天没访问
-5 离现在为止,最近5天曾经访问过
5 离现在为止,刚好5天访问过 - 【-mmin】:根据文件的修改时间(按分钟计算)
- 【-cmin】:根据文件的改变时间
- 【-amin】:根据文件的访问时间
- 【+|-】#
例如:find ./ -amin -5 表示查找5分钟之内访问过的文件
find ./ -amin 5 表示刚好过去5分钟那一刻访问过的文件
find ./ -amin +5 表示至少有5分钟没访问过的文件,即5分钟之前访问过的文件
3.4.3.4 根据文件权限查收参数
- 【-perm MODE】精确匹配才能满足条件
- 【-perm /MODE】任意一位权限匹配就可以满足条件
- 【-perm -MODE】包含匹配
例如:【find ./ -perm 644】 表示权限为644的文件做精确匹配
【find ./ -perm /644】 但凡三个权限中有一个匹配就可以
【find ./ -perm -644】(rw-r–r--) 即包含关系。例如755(rwxr-xr-x)包含644(rw-r—r–),755也可以查出来。750(rwxr-x—)就不能匹配
例如:【find ./ -perm -00l】 表示查找其他用户有执行权限的文件
【find ./ -perm -022】 表示组有写权限并且其他用户也有写权限
【find ./ -perm /022】 表示组有写权限或者其他用户有写权限
3.4.3.5 其它参数
- 【-print】将查找到的文件输出到标准输出
- 【-exec command {} \】将查找到的文件执行command操作,{}和\之间有空格
- 【-ok】和-exec相同,只不过在操作前要询问用户
例子:【find ./ -perm -006 –exec chmod o-w {} \】
表示把查找到的文件去掉其他用户的写入权限例:find . -name .svn | xargs rm -rf
-name filename #查找名为filename的文件
-perm #按执行权限来查找
-user username #按文件属主来查找
-group groupname #按组来查找
-mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime -n +n #按文件访问时间来查GIN: 0px">
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer f1 !f2 找文件,-n指n天以内,+n指n天以前
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer f1 !f2 #查更改时间比f1新但比f2旧的文件
-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c] #查长度为n块[或n字节]的文件
-depth #使查找在进入子目录前先行查找完本目录
-fstype #查更改时间比f1新但比f2旧的文件
-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c] #查长度为n块[或n字节]的文件
-depth #使查找在进入子目录前先行查找完本目录
-fstype #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount #查文件时不跨越文件系统mount点
-follow #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio %; #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount #查文件时不跨越文件系统mount点
-follow #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio #对匹配的文件使用cpio命令,将他们备份到磁带设备中
-prune #忽略某个目录
=====================================================
KaTeX parse error: Expected 'EOF', got '#' at position 40: …t" -print #̲在HOME中查.txt文件并显示
$find . -name “.txt" -print
$find . -name "[A-Z]” -print #查以大写字母开头的文件
$find /etc -name “host*” -print #查以host开头的文件
$find . -name “[a-z][a-z][0–9][0–9].txt” -print #查以两个小写字母和两个数字开头的txt文件
$find . -perm 755 -print
$find . -perm -007 -exec ls -l {} ; #查所有用户都可读写执行的文件同-perm 777
$find . -type d -print
$find . ! -type d -print
$find . -type l -print
$find . -size +1000000c -print #查长度大于1Mb的文件
$find . -size 100c -print # 查长度为100c的文件
$find . -size +10 -print #查长度超过期作废10块的文件(1块=512字节)
$cd /
$find etc home apps -depth -print | cpio -ivcdC65536 -o /dev/rmt0
$find /etc -name “passwd*” -exec grep “cnscn” {} ; #看是否存在cnscn用户
$find . -name “yao*” | xargs file
$find . -name “yao*” | xargs echo “” > /tmp/core.log
$find . -name “yao*” | xargs chmod o-w
======================================================
find -name april* 在当前目录下查找以april开始的文件
find -name april* fprint file 在当前目录下查找以april开始的文件,并把结果输出到file中
find -name ap* -o -name may* 查找以ap或may开头的文件
find /mnt -name tom.txt -ftype vfat 在/mnt下查找名称为tom.txt且文件系统类型为vfat的文件
find /mnt -name t.txt ! -ftype vfat 在/mnt下查找名称为tom.txt且文件系统类型不为vfat的文件
find /tmp -name wa* -type l 在/tmp下查找名为wa开头且类型为符号链接的文件
find /home -mtime -2 在/home下查最近两天内改动过的文件
find /home -atime -1 查1天之内被存取过的文件
find /home -mmin +60 在/home下查60分钟前改动过的文件
find /home -amin +30 查最近30分钟前被存取过的文件
find /home -newer tmp.txt 在/home下查更新时间比tmp.txt近的文件或目录
find /home -anewer tmp.txt 在/home下查存取时间比tmp.txt近的文件或目录
find /home -used -2 列出文件或目录被改动过之后,在2日内被存取过的文件或目录
find /home -user cnscn 列出/home目录内属于用户cnscn的文件或目录
find /home -uid +501 列出/home目录内用户的识别码大于501的文件或目录
find /home -group cnscn 列出/home内组为cnscn的文件或目录
find /home -gid 501 列出/home内组id为501的文件或目录
find /home -nouser 列出/home内不属于本地用户的文件或目录
find /home -nogroup 列出/home内不属于本地组的文件或目录
find /home -name tmp.txt -maxdepth 4 列出/home内的tmp.txt 查时深度最多为3层
find /home -name tmp.txt -mindepth 3 从第2层开始查
find /home -empty 查找大小为0的文件或空目录
find /home -size +512k 查大于512k的文件
find /home -size -512k 查小于512k的文件
find /home -links +2 查硬连接数大于2的文件或目录
find /home -perm 0700 查权限为700的文件或目录
find /tmp -name tmp.txt -exec cat {} ;
find /tmp -name tmp.txt -ok rm {} ;
find / -amin -10 # 查找在系统中最后10分钟访问的文件
find / -atime -2 # 查找在系统中最后48小时访问的文件
find / -empty # 查找在系统中为空的文件或者文件夹
find / -group cat # 查找在系统中属于 groupcat的文件
find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件
find / -mtime -1 #查找在系统中最后24小时里修改过的文件
find / -nouser #查找在系统中属于作废用户的文件
find / -user fred #查找在系统中属于FRED这个用户的文件
例子:
例如:
find ./ -user gandian -a -perm -020 -exec mv {} {}.new ;
表示将当前木下属主是gandian并且属组有写权限的文件的文件名,后面都加上【.new】字符
相关命令
【xargs】命令
例如
find /etc -size +1M -exec echo {} >> /tmp/etc.largefiles ;
等同于
find /etc -size +1M | xargs echo >>/tmp/etc.largefiles
=======================相关示例
1、查找/var目录下属主为root并且属组为mail的所有文件;
find /var -user root -a -group mail -ls
2、查找/usr目录下属主不是root,bin,或student的文件;
find /usr -not ( -user root -o -user bin -o -user student ) -ls
3、查找/etc目录下最近一周内内容修改过且不属于root及student用户的文件
find /etc -not -user root -a -not -user student -a -mtime -7 -ls
4、查找当前系统上没有属主或属组且最近一天内曾被访问过的文件,并将其属主属组均修改为root
find / ( -nouser -o -nogroup ) -a -atime -1 -exec chown root:root {} ;
5、查找/etc目录下大雨1M的文件,并将其文件名写入/tmp/etc.largefiles文件中。
find /etc -size +1M -exec echo “{}” >>/tmp/etc.largefiles ;
find /etc -size +1M >> /tmp/etc.largefiles
6、查找/etc目录下所有用户都没有写权限的文件,显示出其详细信息:
find /etc -not -perm /222 -ls
3.4.4 附加(find --help)
3.4.5 附加(正则表达式语法)