假设我想搜索 C 文件。我如何仅在我的子目录中搜索它们?
我尝试过:ls -R | egrep .c$
,但这也会搜索.c
当前目录中的文件。如何过滤掉当前目录中的文件而只关心子目录中的文件?
答案1
严格在子目录中,
ls */*.c
在子目录的子目录中递归,
find */ -type f -name '*.c' -print
答案2
find
当然,您可以使用像 Triple 所说的文件通配符(即星号扩展) ,但是......那个命令让我畏缩。
当您使用该find
命令时,它有很多内置标志,您可以使用它来明确地告诉它您想要它做什么,因此没有充分的理由使用ls
文件通配符。而且还有很多理由不是到。例如,文件通配通常会忽略任何隐藏的文件或目录。 这意味着名称以点开头的任何文件,或驻留在名称以点开头的目录(或目录的子目录)中的文件,会被忽略。也许这就是您想要的,但是对于文件通配,它并不容易且直接在您的控制之下;与find
它是。
Find 是完成这项工作的正确工具。您想要的选项是-mindepth
.像这样使用它:
find . -mindepth 2 -type f -iname '*.c'
这将查找当前目录中的某个目录中的所有文件(非目录、非特殊文件),或者进一步向下的任意数量的级别,其名称以.c
或结尾.C
。 (该-iname
标志意味着忽略大小写。)
(请注意,这不会遵循符号链接;这通常是您想要的方式,但您可以检查man find
以了解如何调整此行为。)
作为旁注,在学习该命令之前,我也使用过相当长一段时间的ls
管道,但这确实是更好的方法。我发现此链接中给出的实用命令对于实际开始非常有帮助grep
find
find
使用 find
在日常工作中:http://www.thegeekstuff.com/2009/03/15-practical-linux-find-command-examples/
答案3
您可以使用 -深度 +1 来删除对当前文件夹的搜索。
find . -type f -name '*.c' -depth +1 -print