如何在特定目录名称中找到文件?

时间:2017-06-15 07:22:29

标签: linux find command-line-interface

所以我需要在/ home /中找到文件名为“options.php”的所有文件。

find . -name "options.php"

当'在家'时,会找到所有options.php文件,但是,我想只在/ public_html /中找到所有options.php文件。 换句话说,它应该忽略找到的所有其他'options.php'文件。 例如,积极/显示结果:

/home/usr1/public_html/options.php
/home/usr2/public_html/options.php

例如,不应该告诉我:

/home/usr1/public_html/wp-admin/options.php
/home/usr2/public_html/wp-content/plugins/whatever/options.php

4 个答案:

答案 0 :(得分:1)

使用grep从找到的结果中过滤所需的结果。

find . -name "options.php" | grep 'public_html/options.php'

答案 1 :(得分:1)

您可以通过-path选项传递模式,如下所示:

find /home/ -path '*/public_html/options.php'

对于更灵活的模式,使用-regex接受在整个路径上应用的正则表达式。但在这种特殊情况下,-regex没有优势-path

find /home/ -regex '.*/public_html/options.php'

答案 2 :(得分:0)

ls实用程序更适合此任务:

ls -1 /home/*/public_html/options.php

如果要处理结果列表并且想要在没有找到此类文件时出现错误消息或警告,则只需重定向命令的错误输出:

ls -1 /home/*/public_html/options.php 2>/dev/null

使用find实用程序的替代方法是:

find /home -path "*/public_html/options.php"

或者,如果您想在层次结构中进一步向下阻止名为“public_html”的文件夹中的匹配项:

find /home -path "/home/*/public_html/options.php"
find /home -maxdepth 3 -path "*/public_html/options.php"

答案 3 :(得分:0)

您可以限制查找的深度: find . -maxdepth N,这样它应该只在你想要的文件夹中找到options.php。