我在处理命令时遇到一些问题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 -FzZ
project/dir1/dir2'`。
因此,它为此类任务提供了某些替代方案。奇怪的是它没有提到-path
查找命令:
find -path "*/project/dir1/dir2" -print
请注意*/
开头的。这些告诉 find 打印以 结尾的任何路径/project/dir1/dir2
,并且第一个目录的名称必须是project
,否则它将 findmyproject/dir1/dir2
等等。