find命令通过组合路径、条件和动作实现高效文件查找与管理,支持按名称、大小、时间、类型、权限等多条件筛选,并可执行删除、修改权限等操作,结合正则表达式可精准匹配复杂文件名,是Linux系统中强大而灵活的文件搜索工具。

find
-exec
locate
find
find [路径] [表达式]
比如,最简单的,你想在当前目录及其子目录下找所有文件和目录:
find .
如果你想找一个叫
my_document.txt
find . -name "my_document.txt"
-name
.log
find /var/log -name "*.log"
有时候,我们不仅要知道文件在哪里,还要知道它是什么类型。
-type
f
d
l
find . -type d
/tmp
find /tmp -type f
更高级一点,我们经常需要根据文件大小来查找。
-size
c
k
M
G
find /var/log -type f -size +100M
find . -type f -size -1k
时间戳也是一个非常实用的查找条件。
-mtime
-mmin
-atime
-amin
-ctime
-cmin
find . -type f -mtime -7
find . -type f -mtime 7
find . -type f -mtime +7
find
-exec
.bak
-exec
\;
+
find . -name "*.bak" -type f -exec rm {} \;{}find
\;
rm
+
rm
find . -name "*.bak" -type f -exec rm {} +在大型、复杂的Linux文件系统中,文件数量庞大,目录结构深邃,要高效地定位目标文件,仅仅知道基本用法是不够的。这需要我们结合
find
首先,缩小搜索范围是性能优化的第一步。你不可能每次都从根目录
/
/etc
find /etc ...
find / ...
find
其次,组合精确条件。
find
-a
-o
!
例如,我曾经需要清理一个日志服务器,要删除
/var/log
.log
access.log
rm
grep
find
find /var/log -type f -name "*.log" ! -name "access.log" -mtime +30 -print -exec rm {} \;-type f
-name "*.log"
.log
! -name "access.log"
access.log
-mtime +30
-exec rm {} \;这种组合方式,让我能在一个命令中实现多重筛选,避免了多次管道操作的开销和潜在的逻辑错误。我发现很多初学者会习惯性地先
find
grep
xargs
find
find
最常用的权限相关的选项是
-perm
Easily find JSON paths within JSON objects using our intuitive Json Path Finder
30
find . -perm 777
777
find . -perm -g+w
find . -perm -002
-
find . -perm /u+s
find . -perm /4000
/
对我来说,最常见的场景是,我发现一个Web服务器的某个目录下的文件权限有问题,比如有些目录权限是
777
666
755
644
首先,查找并修改目录的权限:
find /var/www/html -type d -perm /777 ! -perm 755 -print -exec chmod 755 {} \;/var/www/html
755
777
find /var/www/html -type d ! -perm 755
755
! -perm 755
755
然后,查找并修改文件的权限:
find /var/www/html -type f -perm /777 ! -perm 644 -print -exec chmod 644 {} \;644
644
在所有权方面,
find
-user
-group
find /home -user olduser -print -exec chown newuser {} \;/home
olduser
newuser
find /var/www -group developers -print -exec chgrp webdev {} \;/var/www
developers
webdev
我经常会先用
-exec
当文件命名规则变得复杂,或者需要根据文件名中的特定模式进行更灵活的查找时,
find
-name
find
-regex
-iregex
-regex
-name
举个例子,假设我需要在
/var/log
app-
YYYY-MM-DD
.log
app-2023-10-26.log
app-*-*.log
app-something-else.log
find /var/log -type f -regex ".*app-[0-9]{4}-[0-9]{2}-[0-9]{2}\.log".*
-regex
app-
app-
[0-9]{4}[0-9]{2}\.log
.log
\.
再比如,我想查找所有文件名中包含
backup
archive
.zip
.tar.gz
find . -type f -iregex ".*(backup|archive).*\.(zip|tar\.gz)"
|
()
-iregex
我个人在使用
-regex
.*
-regex
find . -regex "app-.*\.log"
./app-2023-10-26.log
app-.*\.log
./
.*
^
$
有时候,我也会将
find
grep
-regex
-regex
以上就是Linux文件查找命令find使用实例的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号