Linux find命令在目录结构中搜索文件,并执行指定的操作。Linux下的find命令提供了相当多的搜索条件,非常强大。因为功能强大,find有很多选项,大部分都值得我们花时间去了解。下面简单总结一下它的用法。
Linux系统中的find命令对于查找文件非常有用和方便。它可以根据不同的条件查找文件,例如权限、所有者、修改日期/时间、文件大小等等。在本文中,我们将学习如何使用find命令及其提供的选项来查找文件。
在大多数Linux发行版中,您可以直接使用find命令,而无需任何安装操作。如果你想在linux系统的命令行中特别高效,那么find就是你必须掌握的命令之一。
find命令的基本语法如下:
$ find[路径][选项][表达式]
一.基本用法
1. 列出当前目录和子目录下的所有文件
该命令列出当前目录和子目录中的所有文件。
$查找。/abc.txt。/subdir。/subdir/how.php。/cool.php
该命令与以下命令具有相同的效果
$ find。
$ find。-打印
2. 查找特殊的目录或路径
以下命令将在当前目录的test文件夹中查找文件,默认情况下将列出所有文件。
$ find。/测试。/测试。/测试/abc.txt。/测试/子目录。/test/subdir/how.php。/test/cool.php
以下命令用于查找具有指定名称的文件。
$ find。/test -name 'abc.txt '。/测试/abc.txt
您也可以使用通配符。
$ find。/test -name '*。' php '。/test/subdir/how.php。/test/cool.php
请注意,所有文件夹将被递归搜索。因此,这是查找具有指定扩展名的文件的一种非常强大的方法。
如果我们尝试搜索/文件夹,即根目录,我们将搜索整个文件系统,包括挂载的设备和网络存储设备。所以请谨慎使用。当然,您总是可以通过按Ctrl+c来终止命令。
注意:当指定一个文件夹(如。例子中的/test '文件夹),忽略末尾的斜杠没有问题。但是,如果文件夹是到另一个位置的链接(符号链接),则必须在末尾写一个斜杠,以使find命令正常工作(find。/test/)。
忽略大小写
查找文件名时忽略大小写通常很有用。要忽略大小写,只需使用iname选项而不是name选项。
$ find。/test -iname '*。' Php '。/test/subdir/how.php。/test/cool.php
总是用双引号或单引号将匹配模式(文件名参数)括起来非常有用。如果不这样做,有时候会正常工作,有时候可能会产生奇怪的结果。
3. 限制目录查找的深度
默认情况下,find命令递归搜索整个目录树,这会消耗大量时间和资源。幸运的是,目录搜索的深度可以手动指定。例如,我们只想找到一两个级别内的子目录,这可以通过maxdepth选项来指定。
$ find。/test -maxdepth 2 -name '*。' php '。/test/subdir/how.php。/test/cool.php
$ find。/test -maxdepth 1 -name *。服务器端编程语言(Professional Hypertext Preprocessor的缩写)。/test/cool.php
在第二个例子中,maxdepth被指定为1,表示最多只搜索一个级别内的子目录,即只搜索当前文件夹。
当我们只想搜索当前目录,而不是整个目录树时,这个选项特别有用。
与maxdepth选项类似,还有一个名为mindepth的选项。顾名思义,在到达至少第n级子目录之前,它不会开始查找文件。
4. 反向查找
除了查找符合条件的文件,我们还可以查找所有不符合条件的文件。当我们知道要从搜索中排除哪些文件时,这个选项就可以发挥作用了。
$ find。/test -not -name '*。' php '。/测试。/测试/abc.txt。/测试/子目录
在上面的例子中,我们找到了所有扩展名不是php的文件和文件夹。我们也可以用感叹号!而不是-不是。
找到。/测试!-姓名' *。' php '
5. 结合多个查找条件
我们可以同时使用多个搜索标准来指定文件名并排除一些文件。
$ find。/test -name 'abc* '!-姓名' *。' php '。/测试/abc.txt。/测试/abc
上面的命令查找所有以abc开头并且没有。php扩展。这个例子展示了find命令中的find表达式有多么强大。
OR运算符
当我们使用多个搜索条件时,find命令会通过and运算符将它们组合起来,也就是说,只有满足所有条件的文件才会被列出。但是,如果我们需要基于OR运算进行搜索,我们可以添加-o开关。
$ find -name '*。php' -o -name '*。'文本'。/abc.txt。/subdir/how.php。/abc.php。/cool.php
以上命令查找所有以结尾的文件。php或者。txt。
6. 只查找文件或目录
有时候我们只是想通过某个名字找到对应的文件或者目录,我们很容易就能达到这个要求。
$ find。/测试名称abc*。/测试/abc.txt。/测试/abc
仅查找文件
$ find。/测试类型f -name 'abc* '。/测试/abc.txt
仅查找目录。
$ find。/测试类型d -name 'abc* '。/测试/abc
很有用很方便!
7. 同时在多个目录下查找
如果您想在两个不同的目录中搜索,这个命令非常简单。
$ find。/测试。/dir 2-键入f -name 'abc* '。/测试/abc.txt。/dir2/abcdefg.txt
检查,它确实列出了给定的两个目录中的文件。
8. 查找隐藏文件
在Linux系统中,隐藏文件的名称以英文句号开头,即.因此,要列出隐藏文件,只需添加一个简单的文件名过滤器。
$ find ~-键入f -name '。*'
二、基于文件权限和属性的查找
9. 查找指定权限的文件
通过指定perm选项,我们可以找到具有特定权限的文件。在下面的示例中可以找到所有权限为0664的文件。
$ find。-f型烫发0664。/abc.txt。/subdir/how.php。/abc.php。/cool.php
我们可以使用这个命令来查找具有错误权限的文件,这可能会导致安全问题。
权限检查可以与反向查找结合使用。
$ find。-f型!-烫发0777。/abc.txt。/subdir/how.php。/abc.php。/cool.php
10. 查找具有 SGID/SUID 属性的文件
以下命令查找具有权限644和SGID属性的所有文件。
# find/-perm 2644
我们也可以使用1664来查找设置了粘滞位的文件。
#查找/-烫发1644
除了数字参数,perm选项还接受chmod命令中的模式字符串。在下面的查找中,我们使用另一种语法来代替数字。
$ find/-max depth 2-perm/u=s 2/dev/null
/bin/mount
/宾/苏
/bin/ping6
/bin/fusermount
/bin/ping
/bin/umount
/sbin/mount.ecryptfs_private
注意:由于权限不足,一些目录将被拒绝访问。命令中的2/dev/null用于清除输出中的错误访问结果。
11. 查找只读文件
$ find /etc -maxdepth 1 -perm /u=r
/等等
/etc/雷鸟
/etc/brltty
/etc/dkms
/etc/phpmyadmin
.输出被截断.
12. 查找可执行文件
$ find /bin -maxdepth 2 -perm /a=x
/bin
/bin/preseed_command
/bin/mount
/bin/zfgrep
/bin/tempfile
.输出被截断.
三、基于文件拥有者和用户组的查找
13.查找属于特定用户的文件
在当前目录中找到属于bob的文件。
$ find。-用户鲍勃。/abc.txt。/abc。/subdir。/subdir/how.php。/abc.php
在指定用户的同时,我们还可以指定文件名。
$ find。-用户bob -name '*。' php '
很容易看出,我们可以通过添加过滤条件来缩小搜索文件的范围。
14. 查找属于特定用户组的文件
# find/var/www-团体开发者
四。基于日期和时间的搜索
除了上述搜索标准之外,另一个优秀的搜索标准是文件的修改和访问时间(日期)。这个搜索条件在我们想要找出某段时间内哪些文件被修改过的时候会非常方便。我们来看几个例子。
15. 查找过去的第 N 天被修改过的文件
#查找/-mtime 50
16. 查找过去的 N 天内被访问过的文件
# find/-atime -50
17. 查找某段时间范围内被修改过内容的文件
#查找/-时间50分钟-时间100分钟
18. 查找过去的 N 分钟内状态发生改变的文件
$ find /home/bob -cmin -60
19. 查找过去的 1 小时内被修改过内容的文件
# find/-mmin -60
20. 查找过去的 1 小时内被访问过的文件
# find/-amin -60
五、基于文件大小的查找
21. 查找指定大小的文件
$ find/-尺寸50米
22. 查找大小在一定范围内的文件
$ find/-尺寸50M-尺寸100M
23. 查找最大和最小的文件
我们可以将find命令与ls和sort命令相结合来查找最大或最小的文件。
以下命令使用sort命令的-r选项,即按照从大到小的降序排列。经过head命令筛选后,将显示当前目录及其子目录中最大的五个文件。命令的执行过程需要一段时间,搜索速度取决于文件总数。
$ find。-键入f-exec ls-s { } \;| sort -n -r | head 5
类似地,我们可以删除sort命令的-r选项,以升序排序,从而显示最小的5个文件。
$ find。-键入f-exec ls-s { } \;|排序-n |标题5
24. 查找空文件和空目录
找到一个空文件:
# find /tmp -type f -empty
查找空目录:
$ find ~/-类型d-空
很简单!
六、高级操作
find命令不仅可以按特定条件查找文件,还可以使用任何linux命令操作找到的文件。下面给出两个例子。
25. 使用 ls 命令列出文件信息
在我们使用find命令找到文件后,我们只能看到文件路径。如果想进一步查看文件信息,可以结合ls命令。
$ find。-exec ls-LD { } \;
drwxrwxr-x 4开明开明4096年8月11日19:01。
-rw-rw-r - 1开明开明0 11年8月16日16时25分。/abc.txt
drwxrwxr-x 2开明开明4096年8月11日16:48。/abc
drwxrwxr-x 2开明开明4096年8月11日16:26。/subdir
-rw-rw-r - 1开明开明0 11年8月16日16:26。/subdir/how.php
-rw-rw-r - 1开悟开悟29 Aug 11 19:13。/abc.php
-rw-rw-r - 1开明开明0 11年8月16日16时25分。/cool.php
26. 删除找到的文件
以下命令删除扩展名为的文件。tmp目录下的txt。
$ find /tmp -type f -name '*。txt '-exec RM-f { } \;
我们还可以通过将F after -type改为D并在rm命令后添加-r来删除目录。
$ find/tmp-type d-name ' dirto remove '-exec RM-r-f { } \;
本文由Wray翻译,略有删改。考虑到原文存在一些错误,为方便读者理解,采用意译。请指出不足之处,谢谢。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。