给定以下文件夹布局:
Current_folder
└── FolderA
| └── CMakeList.txt
| └── FolderAA
| └── CMakeList.txt
|
└── FolderB
| └── FolderBA
| | └── CMakeList.txt
| | └── FolderBAA
| | └── CMakeList.txt
| |
| └── FolderBB
| └── CMakeList.txt
|
└── FolderC
└── CMakeList.txt
└── FolderCA
└── CMakeList.txt
我如何使用find
(或任何其他工具)生成类似于以下内容的输出:
Current_folder/FolderA/CMakeList.txt
Current_folder/FolderB/FolderBA/CMakeList.txt
Current_folder/FolderB/FolderBB/CMakeList.txt
Current_folder/FolderC/CMakeList.txt
这意味着在每个递归文件夹分支分别与文字“CMakeLists.txt”匹配后停止搜索。
一个shell函数(未经测试):
你会做这样的事情:
这将打印文件的路径,并在
-quit
从每个提供给.find "$path"
αғsнιη 的答案包含正确的解决方案
find
,但是如果您有很多目录一个接一个地调用find
可能会很慢。如果您想利用所有 CPU 内核并find
并行运行进程,我建议使用GNUparallel
来完成该任务:对我有用的是以下 bash 脚本:
@dessert 的答案也适用于上面的最小示例。在我的实际文件夹结构(〜4000个文件夹)上使用它仍然给出错误的结果。老实说,我不确定为什么。
当我尝试@muru 的解决方案时,它不会停止执行。我猜调用本身的函数没有正确中止?也不确定这里的原因。
PS:在实际的 CMake 项目中,该文件实际上称为“CMakeLists.txt”(注意末尾的额外 s)。只有在已经提供了答案之后,我才发现了这个错误。