如何在 Linux 终端中有效地搜索文件- 高级篇
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在 Linux 终端中有效地搜索文件- 高级篇相关的知识,希望对你有一定的参考价值。
在本文中,让我们探索 find 命令的高级使用技巧。
如果您是第一次学习 find
命令,我在之前的教程[1]中介绍了文件搜索的基础知识,并探讨了一些使用 Linux 快速搜索文件的强大命令。如果您还没有读过它并且还不熟悉 find
,我强烈建议您通读一下[2]然后再回到这里。
如何搜索指定用户的文件
find
命令接受一个名为 user
的特殊参数,您可以使用它来过滤属于指定用户的文件。
语法如下所示:
find [path] -user [username] [options]
假设您想搜索我拥有的所有文件(我在这台笔记本电脑上的用户名是 aruna)。您可以使用以下命令执行此操作:
find ./5minslearn/ -user aruna
搜索属于某用户的文件
上述命令将列出 5minslearn
目录中用户 aruna
拥有的所有文件。
您可能会注意到添加到语法末尾的 [options]
。这意味着您可以在此之后添加任何参数,以使您的搜索更加有效。
例如,让我们尝试仅过滤我拥有的目录。要过滤目录,您必须添加 -type
选项。这是它的命令:
find ./5minslearn/ -type d -user aruna
查找用户创建的目录
从上面的截图中,你可以看到这个命令列出了我在 5minslearn
目录中拥有的所有目录和子目录。
如何搜索具有特定权限的文件
使用 -perm
参数,您可以搜索具有特定权限的文件。
语法如下:
find [path] -perm [permissions] [options]
例如,假设您要搜索当前目录中所有具有只读权限的文件。只读文件的代码是 400
。
find . -perm 400
查找具有只读权限的文件
很久以前,我以只读权限创建了这个 welcome.txt
文件。从上面的截图可以看出,find命令已经完美的识别出来了。
我想分享我在工作中遇到的一个奇怪的经历。
我正在做一个项目,其中包含大量的小文件(大约200多个)。在这些文件中,我必须找到所有不是只读权限的文件。我很确定这种文件数目很少,我一只手就能数过来。
在 200 多个文件中查找最多 5 个文件是一个耗时的过程。所以,我决定另辟蹊径。
我在谷歌上搜索方案,对结果我感到惊讶。
我查询到我可以通过在 -perm
命令前加上一个 -not
标志来做到这一点。这是命令:
find . -not -perm 400
该命令将列出当前目录中所有不是只读权限的文件。
查找所有不是只读权限的文件
除此之外,您可以在 find
命令中的任何选项之前添加此 -not
标志以查找与搜索查询相反的内容。
这是给你的另一个例子:
find . -not -type f
运行上述命令将列出当前目录中所有不是文件的项目(目录、符号链接等)。
如何搜索属于特定组的文件
在 find 命令中使用 -group
参数,您可以搜索属于某个组的所有文件。
语法是:
find [path] -group [groupname] [options]
我的机器上有一个以我的名字命名的组。让我们尝试找到我的组拥有的所有文件。
find . -group aruna
查找命令列出属于一个组的所有文件
您还可以将 -group
选项与其他查找命令选项结合使用以优化搜索。
例如,您可以结合使用 -group
选项和 -perm
选项来搜索属于某个组并具有特定权限的文件。
find . -group aruna -perm 400
查找属于某个组并有只读权限的的所有文件
上面的命令将列出属于aruna 组的所有只读文件。
同样,正如我前面提到的,您还可以将 -group
选项与 -not
选项结合使用,以查找不属于特定组的文件。
让我们尝试查找不属于 sudo
组的文件。
find . -not -group sudo
查找不属于 sudo 组的文件
如何查找最近修改的文件
find
命令中的 -newer
选项搜索在给定文件的最后修改时间之后修改的文件。
语法如下所示:
find [path] -newer [reference_file]
例如,如果要搜索在 notes.txt
文件之后修改的所有文件,可以使用以下命令:
find . -newer notes.txt
此命令将搜索当前目录中在 notes.txt
文件最后修改时间之后修改的所有文件。
查找最近修改的文件
如何搜索几分钟前访问过的文件
要搜索几分钟前访问过的文件,您可以使用 -amin
参数。此参数将接受分钟数 (n
) 并查找 n
分钟前访问的所有文件。
语法是:
find [path] -amin [n] [options]
例如,让我们尝试查找最近 30 分钟内访问过的文件:
find . -amin -30
查找最近 30 分钟内访问过的所有文件
我希望您注意到数字前的负号(减号)。它表示该文件过去曾被访问过。
如何搜索所有空文件
您可以在 find 命令中使用 -empty
标志来搜索空文件和目录。
语法如下:
find [path] -empty [options]
要搜索所有空文件和目录,可以使用以下命令:
find . -empty
查找所有空文件和目录
要仅搜索空目录,您可以将 -empty
选项与 -type
选项结合使用:
find . -type d -empty
查找所有空目录
此命令将列出当前目录中的所有空目录。
-empty
标志可以附加 -delete
标志以删除所有空文件和文件夹。
如何查找与特定正则表达式匹配的文件
-regex
参数允许您使用正则表达式 (RegEx) 应用过滤器。
语法如下所示:
find [path] -regex [expression] [options]
例如,假设您要搜索名称以字母 w 开头的文件。您可以使用以下命令来执行此操作:
find . -regex "./w.*"
查找与指定正则表达式匹配的所有文件
总结
在本文中,您学习了一些有效搜索文件并对文件执行各种操作的高级技巧。
我建议您通过练习来学习 find 命令。自己想出一些场景,并尝试使用您学到的技术来查找文件。
引用链接
[1]
之前的教程: https://www.muouseo.com/article/kq1ezp5yrl.html
[2]
通读一下: https://www.muouseo.com/article/kq1ezp5yrl.html
以上是关于如何在 Linux 终端中有效地搜索文件- 高级篇的主要内容,如果未能解决你的问题,请参考以下文章
高级篇 / ZTNA(7.0) ❀ 01. FortiClient EMS 下载与安装 ❀ FortiGate 防火墙
高级篇 / ZTNA(7.0) ❀ 01. FortiClient EMS 下载与安装 ❀ FortiGate 防火墙
高级篇 / ZTNA(7.0) ❀ 01. FortiClient EMS 下载与安装 ❀ FortiGate 防火墙
Linux高级命令03:文本搜索命令★ Python Web篇学习汇总:Part 01—Linux基础命令绝对路径和相对路径 / 创建删除复制移动文件及目录命令