基本语法
find [起始目录] [寻找条件] [操作]
起始目录:指定从哪个目录开始查找,例如.
表示当前目录,/
表示根目录。
寻找条件:用于指定查找文件的条件,可以包含多种选项和逻辑运算符。
操作:对找到的文件执行的操作,如-print
、-exec
、-ok
、-delete
等。
常用选项及示例
1、按名称查找
精确匹配:-name "filename"
find /path/to/search -name "syslog"
忽略大小写匹配:-iname "filename"
find / -iname "syslog"
模糊搜索:-regex "正则表达式"
find / -regex ".*syslog.*"
2、按类型查找
普通文件:-type f
find /path/to/search -type f
目录:-type d
find /path/to/search -type d
符号链接:-type l
find /path/to/search -type l
块设备文件:-type b
find /path/to/search -type b
字符设备文件:-type c
find /path/to/search -type c
管道文件:-type p
find /path/to/search -type p
套接字文件:-type s
find /path/to/search -type s
3、按大小查找
大于指定大小:-size +N[cwbkMG]
,N 为数值,c 表示字节,w 表示双字,b 表示块(512 字节),k 表示千字节,M 表示兆字节,G 表示吉字节。
find /path/to/search -size +10M
小于指定大小:-size -N[cwbkMG]
find /path/to/search -size -1M
等于指定大小:-size N[cwbkMG]
find /path/to/search -size 10M
4、按修改时间查找
N 天前修改的文件:-mtime +N
find /path/to/search -mtime +7
N 天内修改的文件:-mtime -N
find /path/to/search -mtime -7
N 天前正好修改的文件:-mtime N
find /path/to/search -mtime 7
5、按访问时间查找
N 天前访问的文件:-atime +N
find /path/to/search -atime +30
N 天内访问的文件:-atime -N
find /path/to/search -atime -7
N 天前正好访问的文件:-atime N
find /path/to/search -atime 7
6、按更改时间查找
N 天前更改的文件:-ctime +N
find /path/to/search -ctime +30
N 天内更改的文件:-ctime -N
find /path/to/search -ctime -7
N 天前正好更改的文件:-ctime N
find /path/to/search -ctime 7
7、按权限查找
精确匹配权限:-perm 权限
,例如-perm 755
表示权限为 rwxr-xr-x。
find /path/to/search -perm 755
至少匹配某些权限:-perm /权限
,例如-perm /u=rwx,g=rx,o=rx
表示用户具有读写执行权限,组和其他用户具有读和执行权限。
find /path/to/search -perm /u=rwx,g=rx,o=rx
不匹配某些权限:! -perm 权限
,例如! -perm 755
表示不匹配权限为 rwxr-xr-x 的文件。
8、按用户或组查找
属主为用户:-user 用户名
find /path/to/search -user john
属组为组名:-group 组名
find /path/to/search -group staff
9、组合条件
逻辑与(默认):无需特别指定,直接将多个条件写在一起。
find /path/to/search -name "*.txt" -type f -size +10M
逻辑或:使用-or
。
find /path/to/search ( -name "*.txt" -or -name "*.log" )
逻辑非:使用!
。
find /path/to/search ! -name "*.txt"
10、执行操作
打印结果:-print
(默认操作)
find /path/to/search -name "*.txt" -print
执行命令:-exec 命令 {} ;
,{}
表示找到的文件名,;
表示命令结束,例如删除找到的文件:
find /path/to/search -name "*.tmp" -exec rm -f {} ;
询问后执行命令:-ok 命令 {} ;
,会提示用户确认是否执行命令。
find /path/to/search -name "*.txt" -ok rm {} ;
直接删除文件:-delete
,相当于-exec rm -f {} ;
。
find /path/to/search -name "*.tmp" -delete
限制搜索深度:使用-maxdepth N
限制最大搜索深度为 N,-mindepth N
限制最小搜索深度为 N。
find /path/to/search -maxdepth 2 -name "*.txt"
使用正则表达式查找:-regex "正则表达式"
,支持正则表达式匹配文件路径。
find /path/to/search -regex ".*.txt$"
排除特定目录:使用! -path "排除路径"
,要查找除/tmp
目录外的所有.txt
文件:
find / -path "/tmp" -prune -o -name "*.txt" -print
结合其他命令使用:可以使用xargs
将find
的结果传递给其他命令,例如复制找到的文件到另一个目录:
find /path/to/search -name "*.jpg" | xargs -I {} cp {} /destination_directory/
常见问题解答(FAQ)
1、如何查找当前目录下所有扩展名为.txt
的文件?
find . -name "*.txt"
2、如何在查找文件时忽略大小写?
find /path/to/search -iname "filename"
3、怎样查找过去 7 天内修改过的文件?
find /path/to/search -mtime -7
4、如何查找大于 100MB 且扩展名为.log
的文件?
find /path/to/search -type f -size +100M -name "*.log"
5、怎样删除当前目录下所有以.tmp
结尾的文件?
find . -name "*.tmp" -delete
6、如何查找属于用户john
的所有文件?
find /path/to/search -user john
7、怎么查找某个目录下所有子目录中的文件,但不递归到更深的子目录?
find /path/to/search -maxdepth 1 -type f
8、如何使用find
命令结合grep
查找包含特定文本的文件?
grep -rl "特定文本" /path/to/search
或者先使用find
定位文件,再用xargs grep
:
find /path/to/search -type f | xargs grep -l "特定文本"
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1432805.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复