2017-06-15 60 views
0

所以我需要找到/ home /文件名为“options.php”的所有文件。如何在特定目录名称中找到文件?

find . -name "options.php" 

当“家庭”,那会发现所有options.php文件,但是,我只想找到所有options.php文件时,他们在/的public_html /。 换句话说,它应该忽略所有其他'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 
+0

安装此https://github.com/Avinash-Raj/pls然后运行cd/home/usr1/public_html&pls'options.php'' –

+0

Stack Overflow是一个用于编程和开发问题的网站。这个问题似乎与题目无关,因为它不涉及编程或开发。请参阅帮助中心的[我可以询问哪些主题](http://stackoverflow.com/help/on-topic)。也许[超级用户](http://superuser.com/)或[Unix&Linux堆栈交换](http://unix.stackexchange.com/)会是一个更好的地方。另请参阅[我在哪里发布关于Dev Ops的问题?](http://meta.stackexchange.com/q/134306) – jww

回答

1

可以按如下方式通过-path选项传递图案。但是,在这种特殊情况下-regex没有优势-path

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

ls实用程序是这个任务更适合:

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

如果你想处理结果列表并做不是想要有错误信息或警告,如果没有找到这样的文件,那么只需重新导入CT命令的错误输出:

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" 
+0

/bin/ls:无法访问/home/*/public_html/options.php:没有这样的文件或目录 – SupaMonkey

+0

@SupaMonkey这很奇怪,我不会得到那个响应,_except_显然如果实际上没有这样的文件...也许你想重定向错误输出? – arkascha

1

使用从找到的结果中筛选所需的结果。

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

对于更灵活图案使用-regex它接受施加在整个路径上的正则表达式:

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

感谢您的回答。虽然正确 - 上面的Ruslan的选择要快得多。 – SupaMonkey

+0

不客气。 – zhenguoli

+0

这也会找到名为“public_html”的文件夹中的匹配项...... – arkascha

0

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

相关问题