查找目录名称的特定嵌套,例如 .../project/dir1/dir2

查找目录名称的特定嵌套,例如 .../project/dir1/dir2

我在处理命令时遇到一些问题find;我不太了解它的语法,我需要在脚本中使用它来查找可以位于任何地方的特定目录结构。

基本上,我有一个像“project/dir1/dir2”这样的结构,我知道它始终是这三个目录,具有相同的名称,按顺序排列。可能不同的是这个结构的嵌套深度;例如你可以有:

$HOME/project/dir1/dir2

或者

$HOME/workspace/project/dir1/dir2

基本上我需要一种通用的方法来定位该project/dir1/dir2结构,无论它埋得多深。

这将永远在 Ubuntu 上。我考虑过使用locate,但随后我必须保证locate 数据库始终是最新的。

答案1

如果你使用过,find -name project/dir1/dir2你会发现这样的消息:

find: 警告:Unix 文件名通常不包含斜杠(尽管路径名包含斜杠)。这意味着-name 'project/dir1/dir2'在该系统上可能始终评估为 false。您可能会发现该-wholename测试更有用,或者也许-samefile。或者,如果您使用 GNU grep,则可以使用find ... -print0 | grep -FzZproject/dir1/dir2'`。

因此,它为此类任务提供了某些替代方案。奇怪的是它没有提到-path查找命令:

find -path "*/project/dir1/dir2" -print

请注意*/开头的。这些告诉 find 打印以 结尾的任何路径/project/dir1/dir2,并且第一个目录的名称必须是project,否则它将 findmyproject/dir1/dir2等等。

相关内容