【问题标题】:search/find a folder that has a name with integer numbers in linux from terminal从终端在linux中搜索/查找名称为整数的文件夹
【发布时间】:2013-02-27 05:43:32
【问题描述】:

我在我的机器上使用 fedora 15。实际上,我正在尝试通过在整个文件系统中搜索来查找名称为 apache-tomcat-7.0.37 的文件夹

其实我在/opt/tomcat/路径中有一些类似下面的文件夹

apache-tomcat-7.0.37
apache-tomcat-6.0.34
apache-tomcat-7.0.67
.........

还有/usr/share/tomcat/的一些文件夹

apache-tomcat-4.0.7
apache-tomcat-6.0.4
apache-tomcat-8.0.6
.........

所以我想要的是使用命令从 linux 终端定位/查找/搜索所有这些文件夹路径。

我在 Google 上搜索了很多,得到了一些命令,例如 locatefind,如下所示

find / -name apache-tomcat*
locate apache-tomcat 

上面的命令列出了所有的文件夹,包括额外不需要的文件夹信息,所以实际上我想要的是,只需要搜索名称为apache-tomcat-x.x.x,apache-tomcat-xx.xx.xx的文件夹

在文件夹名称中,起始词apache-tomcat 相同,只有整数部分(version number)发生变化。所以我想找到所有具有不同版本号的文件夹,比如使用正则表达式代替整数来查找文件夹

所以任何人都可以告诉我如何通过使用带有正则表达式的命令或类似的命令来搜索上述场景的文件夹,它可以找到所有名称为apache-tomcat-xx.x.xxx.....

【问题讨论】:

  • 您是否考虑过使用locate 命令,然后将其输出传送到某个grepawk
  • yup 得到了一些命令,比如 locate apache-tomcat | grep -E .... 但没有这样接近所以

标签: linux search command find locate


【解决方案1】:

这应该找到所有具有模式 apache-tomcat-X.Y.Z 的文件、目录、链接等,其中 X、Y 和 Z 是整数。

find . -regextype sed -regex ".*/apache-tomcat-[0-9]\+\.[0-9]\+\.[0-9]\+"

如果您只查找目录,请使用此变体:

find . -type d -regextype sed -regex ".*/apache-tomcat-[0-9]\+\.[0-9]\+\.[0-9]\+"

如果要从 / 开始搜索整个系统,请使用此变体:

find / -type d -regextype sed -regex ".*/apache-tomcat-[0-9]\+\.[0-9]\+\.[0-9]\+"

【讨论】:

  • 我尝试在您的原始帖子中创建相同的测试目录,我能够得到预期的结果。您从哪个目录运行此命令?此命令将仅在您所在的当前目录下搜索。
  • 不抱歉,正如我在问题中指出的那样,我想尽快在整个文件系统中搜索该格式的文件夹...
  • 添加了第三个变体,从 / 开始搜索。如果遇到权限问题,请在命令前加上 sudo。
  • 是的,替换后有效。在上面的命令中使用 /,但实际上我想在 linux 服务器上运行它以检查是否安装了 tomcat,所以实际上“定位”命令非常快并且得到准确的结果,所以我们需要运行 updatedb 确定为了得到完整的结果?
  • 实际上我正在制作一个脚本来执行命令并实际返回路径
【解决方案2】:

您可以向locate 提供合适的正则表达式,以便快速搜索您的整个系统:

locate -b --regex "apache-tomcat-[0-9]+.[0-9]+.[0-9]+$"

locate 的任何使用一样,它使用的文件数据库必须是最新的。如果你有足够的权限,你可以sudo updatedb强制更新。

【讨论】:

  • locate 将检索所有位置的文件,而不是在您感兴趣的一个目录下(如果您是的话)。此外,locate 仅从其数据库中检索文件。因此,您需要在运行 locate 之前运行 sudo updatedb 以确保您的数据库是最新的。无可否认,locate 比 find 通常更快。
  • @Tuxdude:是的,同意,在 find 和 locate 之间肯定有权衡,使用哪个取决于具体情况。我会在我的答案中添加一些内容。
猜你喜欢
  • 2015-09-11
  • 1970-01-01
  • 2016-08-22
  • 2019-03-14
  • 1970-01-01
  • 1970-01-01
  • 2016-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多