find
命令在Unix和类Unix系统中,常用于在文件系统中指定多种条件进行搜索文件和目录的命令行工具
它可以根据文件名、类型、大小、修改时间、权限等多种条件进行搜索,并对搜索结果执行各种操作,如 删除、移动、重命名、等。
一、基础应用
find [路径] [搜索条件]
[路径]:指搜索的起始路径、
[搜索条件]:指用于过滤搜索的选项、
常见选项:
-name
#根据文件名搜索文件或目录、
例:
find /var/ -name "*.log"
#在/var/这个目录下寻找名字以.log为结尾的文件或目录
-type
#根据文件类型搜索文件或目录
例:
find /etc/ -type f #在/etc/目录下寻找、类型为文本文件
find /var/ -type d #在/var/目录下寻找、类型为目录
find /etc/ -type l #在/etc/目录下寻找、类型为链接文件(快捷方式)
find /dev/ -type b #在/dev/目录下寻找、类型为块设备的文件
find / -type p #在根目录下寻找 、类型为管道的文件
find / -type s #在根目录下寻找 、类型为socket(套接字)的文件
-size
#根据文件大小搜索 K(KB) M(MB) G(GB)
find /etc/ -size +10M #在/etc/目录下寻找、大于10M的文件
find /etc/ -size -10M #在/etc/目录下寻找、小于10M的文件
-mtime
#根据文件修改时间搜索
find /etc/ -mtime +90 #在/etc/目录下寻找、超过90天未修改的文件
find /etc/ -mtime -7 #在/etc/目录下寻找、7天内有过修改的文件
-user
#根据文件所属用户查询
-group
#根据文件所属组查询
find /tmp/ -user lucy #在/tmp/目录下查找属于lucy用户的所有文件
find /tmp/ -group jack #在/tmp/目录下查找属于jack这个组的所有文件
二、高级应用、
find [路径] [搜索条件] --exec `执行的命令` \;
需要注意的是,使用 --exec
选项时,需要在命令的末尾添加 \;
以表示命令的结束。此外,{}
是一个占位符,表示找到的文件的路径。在执行命令时,find
会将 {}
替换为找到的文件路径。
1.查找并删除所有
例:
find /ace/ -name "*.txt" -exec rm -f {} \;
#在/ace/目录及其子目录中查找所有以 .txt 结尾的文件,并将它们删除。
2. 查找并压缩所有 .log
文件:
例:
find /var/log/nginx/ -name "*.log" -exec tar -zcf logs.tar.gz {} \;
#在/var/log/nginx/目录及其子目录中查找所有以 .log 结尾的文件,并将它们压缩为 .tar.gz 格式包。
3.查找并将所有 .jpg
文件移动到名为 backup
的目录:
例:
find /images/ -name "*.jpg" -exec mv {} backup \;
#在/目录及其子目录中查找所有以 .jpg 结尾的文件,并将它们移动到名为 backup 的目录。
4.查找并将所有 .pdf
文件的所有者更改为 john
:
例:
find . -name "*.pdf" -exec chown john {} \;
#会在当前目录及其子目录中查找所有以 .pdf 结尾的文件,并将它们的所有者更改为 john。
5.查找并将所有 .mp3
文件的权限更改为 644:
例:
find /musics -name "*.mp3" -exec chmod 644 {} \;
#在/musics目录及其子目录中查找所有以 .mp3 结尾的文件,并将它们的权限更改为 644。
三、实战技巧
除了基本的查找功能外,find
命令还可以结合其他命令和技巧,实现更强大的功能。以下是一些实战技巧:
1.查找并删除特定文件:
例:
find /var/ -name "*.tmp" -exec rm -f {} \;
#删除指定目录下所有以.tmp结尾的文件。
2.查找空文件或空目录:
例:
find /var/ -type f -empty
#查找指定目录下的所有空文件
3.查找并修改文件权限:
例:
find /path/to/dir -type f -exec chmod 644 {} \;
#将指定目录下的所有文件的权限设置为644
4.查找并压缩文件:
例:
find /path/to/dir -name "*.log" -exec gzip {} \;
#将指定目录下所有以.log结尾的文件进行gzip压缩。
5.排除某些目录进行查找:
例:
find /opt/dir -path /opt/dir/exclude_dir -prune -o -type f -print
#/opt/dir目录下先排除exclude_dir子目录在搜索类型为文件的数据。 -path 为指定路径 -prune为排除 -o为或
find
命令是Linux系统中一个非常强大的工具,它可以根据各种条件在文件系统中查找文件或目录。通过掌握其基本功能、常用选项以及实战技巧,你可以更加高效地管理和操作Linux系统中的文件。