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

Dou*_*hen 5 directory find shell-script

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

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

$HOME/project/dir1/dir2

或者

$HOME/workspace/project/dir1/dir2

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

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

Bra*_*iam 11

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

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

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

find -path "*/project/dir1/dir2" -print
Run Code Online (Sandbox Code Playgroud)

请注意*/开头。这些告诉 find 打印任何/project/dir1/dir2以第一个目录的名称结尾的路径,project否则它会找到myproject/dir1/dir2等等。