find命令总结
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了find命令总结相关的知识,希望对你有一定的参考价值。
find命令:
用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
语法:
find [路径] [选项]
常用选项:
-amin<分钟>:查找在指定时间曾被存取过的文件或目录,以分钟为单位计算
-atime<天>:查找在指定时间曾被存取过的文件或目录,以24小时(天)为单位计算
-cmin<分钟>:查找在指定时间之时被更改过的文件或目录,以分钟为单位计算
-ctime<天>:查找在指定时间之时被更改的文件或目录,以24小时(天)为单位计算
-mmin<分钟>:查找在指定时间曾被更改过的文件或目录,以分钟为单位计算
-mtime<天>:查找在指定时间曾被更改过的文件或目录,以24小时(天)为单位计算
-depth:从指定目录下最深层的子目录开始查找
-maxdepth<目录层级>:设置最大目录层级
-mindepth<目录层级>:设置最小目录层级
-name<名称>:指定字符串(文件名/目录名)寻找文件或目录;(-iname忽略大小写)
-path<范本样式>:指定字符串作为寻找目录的范本样式;(-ipath忽略大小写)
-newer<参考文件或目录>:查找其更改时间比指定文件或目录的更改时间要新的文件或目录
-perm<权限数值>:查找符合指定的权限数值的文件或目录
-print:将匹配的文件或目录输出到标准输出
-regex<正则>:指定正则字符串寻找文件或目录;
-size<文件大小>:查找符合指定的文件大小的文件;不加单位默认为b(512字节);
(+表示大于;-表示小于;大小单位:c(1字节)/w(2字节)/b(512字节)/k/M/G...)
-type<文件类型>:只寻找符合指定的文件类型的文件
<文件类型> f:普通文件 l:链接文件 d:目录 c:字符设备 b:块设备
s:套接字 p:Fifo管道文件
-user<属主>:查找符合指定的属主的文件或目录;(-nouser不属于本地属主;-uid)
-group<属组>:查找符合指定属组的文件或目录;(-nogroup不属于本地属组;-gid)
-exec<执行指令>:find缩匹配的文件执行该指令;格式:-exec command {} \;
-ok<执行指令>:和-exec类似,但在执行指令前会询问用户是否确定执行
xargs:
find 命令把匹配到的文件传递给 xargs 命令,而 xargs 命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去
示例1:
1.列出当前目录及子目录下所有文件和文件夹
find .
2.在/home目录下查找以.txt结尾的文件名;(忽略大小写:-iname)
find /home -name "*.txt"
3.当前目录及子目录下查找所有以.txt和.pdf结尾的文件
find . -name "*.txt" -o -name "*.pdf"
4.匹配文件路径或者文件
find /usr/ -path "*local*"
5.基于正则表达式匹配文件路径;(忽略大小写:-iregex)
find . -regex ".*\(\.txt\|\.pdf\)$"
6.找出/home下不是以.txt结尾的文件
find /home ! -name "*.txt"
7.向下最大深度限制为3的所有文件
find . -maxdepth 3 -type f
8.搜索最近七天内被访问过的所有文件(-7表示7天内;+7表示超过7天)
find . -type f -atime -7
9.搜索访问时间超过10分钟的所有文件
find . -type f -amin +10
10.找出比file.log修改时间更新的文件
find . -type f -newer file.log
11.搜索大于10KB的文件
find . -type f -size +10k
12.删除当前目录下所有.txt文件
find . -type f -name "*.txt" -delete
13.当前目录下搜索出权限为777的文件
find . -type f -perm 777
14.找出当前目录下权限不是644的php文件
find . -type f -name "*.php" ! -perm 644
15.找出当前目录用户tom拥有的所有文件
find . -type f -user tom
16.找出当前目录用户组sunk拥有的所有文件
find . -type f -group sunk
17.找出当前目录下所有root的文件,并把所有权更改为用户tom
find .-type f -user root -exec chown tom {} \;
{} 用于与-exec选项结合使用来匹配所有文件,然后会被替换为相应的文件名
18.找出自己家目录下所有的.txt文件并删除
find $HOME/. -name "*.txt" -ok rm {} \;
19.查找当前目录下所有.txt文件并把他们拼接起来写入到all.txt文件中
find . -type f -name "*.txt" -exec cat {} \;> all.txt
20.将30天前的.log文件移动到old目录中
find . -type f -mtime +30 -name "*.log" -exec cp {} old \;
21.找出当前目录下所有.txt文件并以“File:文件名”的形式打印出来
find . -type f -name "*.txt" -exec printf "File: %s\n" {} \;
22.查找当前目录或者子目录下所有.txt文件,但是跳过子目录sk
find . -path "./sk" -prune -o -name "*.txt" -print
23.要列出所有长度为零的文件
find . -empty
24.列出当前目录下所有文件的详细信息
find . -type f -exec ls -l {} \;
25.在/logs 目录中查找更改时间在 5 日以前的文件并删除它们
find logs -type f -mtime +5 -exec rm {} \;
26.当前目录中查找所有文件名以.log 结尾且更改时间在 5 日以上的文件;并
提示是否确定删除
find . -name "*.conf" -mtime +5 -ok rm { } \;
27.查找当前用户主目录下的所有文件
find $HOME -print 或者 find ~ -print
28.让当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户
具有读权限的文件
find . -type f -perm 644 -exec ls -l { } \;
29.为了查找系统中所有文件长度为 0 的普通文件,并列出它们的完整路径
find / -type f -size 0 -exec ls -l { } \;
30.查找/var/logs目录中更改时间在7日前的普通文件,并在删除前询问它们
find /var/logs -type f -mtime +7 -ok rm { } \;
31.为了查找系统中所有属于 root 组的文件
find . -group root -exec ls -l { } \;
32.删除当目录中访问时间在 7 日以来、含有数字后缀的 admin.log文件(如admin.log123)
find . -name "admin.log[0-9][0-9][0-9]" -atime -7 -ok rm { } \;
33.为了查找当前文件系统中的所有目录并排序
find . -type d | sort
34.查找当前目录下的每一个普通文件,然后使用 xargs 命令来测试它们分别属于哪类文件
find . -type f | xargs file
35.查找当前目录下所有txt文件 ,然后把结果保存到/tmp/txt.list 文件中
find / -name "*.txt" | xargs echo "" >/tmp/txt.list
36.在当前目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限
find . -perm -7 | xargs chmod o-w
37.用 grep 命令在所有的普通文件中搜索 hostname 这个词
find . -type f | xargs grep "hostname"
38.当前目录及子目录中查找文件名以一个大写字母开头的文件
find . -name "[A-Z]*"
39.希望在/usr/local目录下查找文件,但不希望在/usr/local/mysql 目录下查找
find /usr/local -path "/usr/local/mysql" -prune -o -print
40.希望在/usr/local目录下查找文件,但不希望在/usr/local/mysql和/usr/local/php目录下查找
find /usr/local \( -path /usr/local/mysql -o -path /usr/local/php \) -prune -o -print
41.查找当前目录下非root属主的文件
find . ! -user root -type f
42.当前目录查找更改时间比文件1.txt新但比文件2.txt旧的文件
find . -type f -newer 1.txt ! -newer 2.txt
43.在当前目录下查找文件长度大于 1 M 字节的文件
find . -size +1000000c == find . -size +1M
44.在根目录下开始查找名称为passwd的文件
find / -name "passwd" -depth
以上是关于find命令总结的主要内容,如果未能解决你的问题,请参考以下文章