find命令是Linux和UNIX系统中一个非常强大的工具,它用于在指定目录下根据给定条件搜索文件。find命令功能强大,使用灵活,可以组合多种条件和选项来精确查找文件,并对查找到的文件执行指定的操作。

基本语法
find命令的基本语法如下:
find [pathname] [options] [operands]
pathname:指定要查找的文件所在的目录。如果不指定,默认从当前目录开始。options:指定查找的条件,如文件名、文件类型、大小、修改时间等。operands:指定对查找到的文件执行的操作,如打印文件名、删除文件等。
常用选项
-
按名称查找:
-name "字串":查找文件名匹配所给字串的所有文件,支持通配符*、?、[]。-iname "字串":忽略大小写地查找文件名匹配所给字串的所有文件。-lname "字串":查找文件名匹配所给字串的所有符号链接文件。
-
按文件类型查找:
-type x:查找类型为x的文件,x可以是以下字符之一:b:块设备文件c:字符设备文件d:目录文件p:命名管道(FIFO)f:普通文件l:符号链接文件s:socket文件
-
按文件大小查找:
-size n[bckw]:查找指定文件大小的文件,n后面的字符表示单位,缺省为b(512字节的块)。
-
按修改时间查找:
-mtime n:查找n天以前被修改过的所有文件。-amin n:查找n分钟以前被访问过的所有文件。-cmin n:查找n分钟以前文件状态被修改过的所有文件。-mmin n:查找n分钟以前文件内容被修改过的所有文件。
-
按文件权限查找:
-perm 权限:查找具有指定权限的文件和目录,权限的表示可以如711,644。
-
按用户和组查找:
-user '字串':查找属于用户名为所给字串的所有的文件。-group '字串':查找属于用户组名为所给字串的所有的文件。-uid n:查找属于ID号为n的用户的所有文件。-gid n:查找属于ID号为n的用户组的所有文件。
-
按路径名查找:
-path '字串':查找路径名匹配所给字串的所有文件,字串内可用通配符*、?、[]。
-
其他常用选项:
-empty:查找大小为0的目录或文件。-print:将搜索结果输出到标准输出。-exec command {} \;:对查找到的文件执行指定的shell命令。
实际shell用例
- 在当前目录及子目录下查找以.txt结尾的文件:
find . -name "*.txt"
- 查找当前目录下大于1M的文件:
find . -size +1M
- 查找当前目录下的普通文件:
find . -type f
- 查找1天内修改过的文件:
find . -mtime -1
- 查找权限为644的文件:
find . -perm 644
- 查找属于特定用户的文件:
find . -user username
- 组合多个条件查找:
find . -size +500k -name "*.zip" -mtime -10
- 对查找到的文件执行删除操作:
find . -name "*.tmp" -exec rm -f {} \;
- 查找并删除特定目录下的过期文件:
find /path/to/search -name "*.tmp" -mtime +30 -exec rm {} \;
- 查找并压缩文件:
find . -size +1M -exec gzip {} \;
- 查找并列出特定目录下的所有目录:
find /path/to/search -type d
- 忽略特定目录进行查找:
find . -path './src/emacs' -prune -o -print
- 按深度搜索:
find . -maxdepth 1 -name "*sql"
- 查找并显示文件内容:
find . -name 'main*' -exec more {} \;
- 查找隐藏文件:
find $HOME -type f -name ".*"
通过组合不同的选项和表达式,find命令可以完成各种复杂的文件查找任务。在实际使用中,可以根据具体需求灵活运用这些选项来满足不同的查找需求。
1503

被折叠的 条评论
为什么被折叠?



