find命令,详细

find命令,查找文件和目录

find查找命令是Linux系统中最重要和最常用的命令之一。查找用于根据与参数匹配的文件指定的条件来搜索和查找文件和目录列表的命令。查找可以在各种条件下使用,您可以通过权限,用户,组,文件类型,日期,大小等可能的条件查找文件。
语法:
find pathname -option [-print ] [ -exec | -ok command ] {} ;
find命令的参数;
pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为command { } ;,注意{ }和\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

第一部分:查找名称查找文件的基本查找命令

-name filename //查找名为filename的文件。
-iname filename //与-name相同,查找名为filename的文件,但忽略大小写,即不区分大小写。
-type b/d/c/p/l/f //按照文件类型查找,查是块设备、目录、字符设备、管道、符号链接、普通文件。 块设备:随机读取,例如硬盘 字符设备:顺序读取,例如键盘、鼠标
-type查找某一类型的文件,诸如:
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。
s -socket文件
1.使用当前目录中的名称查找文件
在这里插入图片描述
2.在指定目录下查找文件
在这里插入图片描述
3.使用名称和忽略大小写查找文件
在这里插入图片描述
4.使用名称查找目录
在这里插入图片描述
5.使用名称查找PHP文件
在这里插入图片描述
6.查找目录中的所有PHP文件
在这里插入图片描述
7.查找目录并列出目录下的文件(为找到的每一个目录单独执行ls命令,没有选项-print时文件列表前一行不会显示目录名称 在这里插入图片描述
说明:这里要注意{}的使用:替代查找到的文件
8.查找目录并列出目录下的文件(为找到的每一个目录单独执行ls命令,执行命令前需要确认)
在这里插入图片描述

第二部分:根据他们的权限查找文件

-perm //按执行权限来查找
-empty //查找长度为零(即空文件)的文件 r 4 w 2 x 1
1.查找权限为777的所有文件
在这里插入图片描述
2.查找没有777权限的文件
说明: !表示否定,即取反
在这里插入图片描述
3.查找权限设置为644的所有SGID位文件。
# find / -perm 2644
4.查找权限为551的所有Sticky Bit设置文件。
# find / -perm 1551
5.查找所有可执行文件。
# find / -perm /a=r
6.找到777个权限和Chmod到644的文件
在这里插入图片描述
7.找到一个名为test.c的文件并将其删除
# find -type f -name test.c -exec rm -f {} ;
8.查找和删除多个文件,如.mp3或.txt
# find -type f -name “.txt" -exec rm -f {} ;
# find -type f -name "
.mp3” -exec rm -f {} ;
9.在特定路径下查找所有空文件。
# find /tmp -type f -empty
10.在特定路径下查找所有空目录
# find /tmp -type d -empty
12. 查找空文件或空目录
# find ./ -empty
13.查找空文件并删除
# find ./ -empty -name test.a -print -delete
14.要查找所有隐藏的文件,请使用以下命令。

第三部分:基于所有者和组的搜索文件

-user username #按文件属主来查找
-group groupname #按组来查找
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存(孤儿文件 没有所有者的文件)
1.查找所有者root的、名为test.c的文件。
# find / -user root -name test.c
2.查找/ home目录下属于Group Developer的所有文件。
# find / -group developer
3.查找无效属组的所有文件
# find / -nogroup
4.查找无效属主的所有文件
# find / -nouser

第四部分:根据日期和时间查找文件和目录

-mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime -n +n #按文件访问时间来查,-n指n天以内,+n指n天以前
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
注:我们可以使用stat命令来查看一个文件的时间信息。

  1. 在/root下查找文件更新日是在距现在时刻二天以内的文件
    # find /root/ -mtime -2
  2. 在/root下查找文件更新日是在距现在时刻二天以上的文件
    # find /root/ -mtime +2
    3.在/root下查找文件更新日是在距现在时刻一天以上二天以内的文件
    # find /root/ -mtime 2
    注:-atime、-ctime与-mtime用法类似,可以自行查看man帮助。
    4.查找文件更新日是在距现在时刻二分钟以内的文件
    #find ./ -mmin -2
    5.查找文件更新日是在距现在时刻二分钟以上的文件
    #find ./ -mmin +2
    6.查找文件更新日是在距现在时刻一分钟以上二分钟以内的文件
    #find ./ -mmin 2
    注:-amin、cmin与-mmin用法类似,可以自行查看man帮助。
    7.查找文件更新时间比文件abc的内容更新时间新的文件
    #find ./ -newer abc
    查找更改时间比文件file1新但比文件file2旧的文件。-newer file1 ! file2
    8.查找文件访问时间比文件abc的内容更新时间新的文件
    #find ./ -anewer abc
    9.查找所有被修改超过50天以及少于100天的文件。
    # find / -mtime +50 -mtime -100
第五部分:根据大小查找文件

-size [+/-]n
按照文件大小查询文件,+n表示文件大小大于n,-n表示文件大小小于n。常用单位:k, M, G
# find /tmp -size 2M //查找在/tmp 目录下等于2M的文件
# find /tmp -size +2M //查找在/tmp 目录下大于2M的文件
# find /tmp -size -2M //查找在/tmp 目录下小于2M的文件
# find /tmp -size +50M -size -100M //找到大于50MB且小于100MB的所有文件。
#find / -type f -name “.mp3” -size +10M -exec rm {} ; //查找超过10MB的所有.mp3文件,并使用一个命令删除它们。
1.find 命令默认会递归查找整个目录树,而这非常消耗时间和资源。好在目录查找的深度可以手动指定。例如我们只想查找一到两层以内的子目录,可以通过 maxdepth 选项来指定。
# find ./test -maxdepth 2 -name "
.php"
# find ./test -maxdepth 1 -name ".php"
第二个示例中指定了maxdepth 为1,表明最多只查找一层内的子目录,也就是只查找当前文件夹。
当我们只想在当前目录下查找,而不是查找整个目录树的时候,这个选项会特别有用。
与maxdepth 选项相似,还有一个选项叫做 mindepth ,正如名字所表示的那样,它会至少到达第 N 层子目录后才开始查找文件。
2.反向查找
除了查找满足条件的文件之外,我们还可以查找不满足条件的所有文件。当我们知道要在查找中排除哪些文件时,这个选项就能发挥作用了。
$ find ./test -not -name “
.php”
./test
./test/abc.txt
./test/subdir
在上面的示例中我们找到了所有扩展名不是 php 的文件和文件夹。我们也可以使用感叹号 ! 来代替 -not。
find ./test ! -name “.php”
结合多个查找条件
我们可以同时使用多个查找条件来指定文件名并排除某些文件。
$ find ./test -name ‘abc
’ ! -name ‘.php’
./test/abc.txt
./test/abc
上面的命令查找所有以abc 开头并且不含 .php 扩展名的文件。这个示例展现了 find 命令自带的查找表达式是多么的强大。
3.OR 操作符
当我们使用多个查找条件时, find 命令会将它们通过 AND 操作符(-a)结合起来,也就是说,只有满足所有条件的文件才会被列出。不过,如果我们需要进行基于 OR 运算的查找时,可以加上 -o开关。
$ find -name ‘
.php’ -o -name ‘*.txt’
./abc.txt
./subdir/how.php
./abc.php
./cool.php
上面的命令查找所有以 .php 结尾或者以 .txt 结尾的文件。
4.-prune:不在当前指定目录中查找
例如:已知在/etc,/etc/pam.d以及/usr/bin目录下都有一个名为passwd的文件,我们看一下-prune的作用
# find / -name passwd  //在根目录及其子目录下查找名为passwd的文件
./usr/bin/passwd
./etc/passwd
./etc/pam.d/passwd
# find / -path /etc -prune -o -name passwd -print  //在根目录及其子目录(除了/etc目录及其子目录)下查找名为passwd的文件。
./usr/bin/passwd
# find / ( -path /usr/bin -o -path /etc ) -prune -o -name “passwd” -print  //在根目录及其子目录(除了/usr/bin目录及其子目录;/etc目录及其子目录)下查找名为passwd的文件。由于命令行不能直接识别圆括号,因此要用转义字符\,在和前后都要有空格。

  • 40
    点赞
  • 265
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
`find` 命令是一个非常常用的 Linux 命令,用于在指定目录下查找文件。它的语法如下: ``` find [path] [expression] ``` 其中,`path` 参数指定要查找的目录,可以是相对路径或绝对路径。`expression` 参数用于指定查找的条件,例如文件名、文件类型、文件大小等等。 以下是一些常用的 `find` 命令示例: 1. 查找指定文件名的文件: ``` find /path/to/search -name "filename" ``` 例如,要在当前目录下查找名为 `test.txt` 的文件,可以使用以下命令: ``` find ./ -name "test.txt" ``` 2. 查找指定类型的文件: ``` find /path/to/search -type [f/d/l] ``` 其中,`f` 表示查找普通文件、`d` 表示查找目录、`l` 表示查找符号链接。 例如,要在当前目录下查找所有的目录,可以使用以下命令: ``` find ./ -type d ``` 3. 查找指定大小的文件: ``` find /path/to/search -size [+/-]size[c] ``` 其中,`+` 表示查找大于指定大小的文件,`-` 表示查找小于指定大小的文件,`size` 表示要查找的文件大小,`c` 表示单位为字节。 例如,要在当前目录下查找大小大于 1M 的文件,可以使用以下命令: ``` find ./ -size +1M ``` 4. 查找指定时间范围内修改过的文件: ``` find /path/to/search -mtime [+/-]n ``` 其中,`+` 表示查找修改时间在 n 天以前的文件,`-` 表示查找修改时间在 n 天以内的文件,`n` 表示天数。 例如,要在当前目录下查找 7 天以内修改过的文件,可以使用以下命令: ``` find ./ -mtime -7 ``` 以上是 `find` 命令的一些常用示例,还有很多其他的用法,可以通过 `man find` 命令查看 `find` 命令的手册页来了解更多信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值