当前位置:首页 > 行业动态 > 正文

如何正确使用Linux中的find命令语法?

find 命令的基本语法是 find [起始目录] [查找条件] [操作]。它用于在指定目录及其子目录中查找符合特定条件的文件或目录,并可以对找到的结果执行指定操作。

基本语法

find [起始目录] [寻找条件] [操作]

起始目录:指定从哪个目录开始查找,例如. 表示当前目录,/ 表示根目录。

如何正确使用Linux中的find命令语法?  第1张

寻找条件:用于指定查找文件的条件,可以包含多种选项和逻辑运算符。

操作:对找到的文件执行的操作,如-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 "特定文本"
0