仅在子目录中查找文件

仅在子目录中查找文件

假设我想搜索 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管道,但这确实是更好的方法。我发现此链接中给出的实用命令对于实际开始非常有帮助grepfindfind使用 find在日常工作中:http://www.thegeekstuff.com/2009/03/15-practical-linux-find-command-examples/

答案3

您可以使用 -深度 +1 来删除对当前文件夹的搜索。

find . -type f -name '*.c' -depth +1 -print

相关内容