它必须存在,我的问题是如何表达我的需求。当我搜索给定的文件名时,我希望搜索在找到第一次出现时停止搜索当前分支,但继续在其他分支中搜索。
这是一个例子。这是我的当前目录:
dir1/Makefile
dir2/
dir3/Makefile
dir3/dira/Makefile
dir4/dirb/Makefile
我想要的结果find Makefile
是:
dir1/Makefile
dir3/Makefile
dir4/dirb/Makefile
我不介意使用哪种脚本语言,但我更喜欢使用脚本语言中现有的功能,而不是自己实现。
答案1
因为我真的找不到任何东西,所以我自己做了一个(用 python)
#!/usr/bin/python
import os
def findInSubdirectory(filename, path):
for root, dirs, names in os.walk(path, topdown=True):
if filename in names:
print os.path.join(root, filename)
del dirs[:]
findInSubdirectory('Makefile', os.getcwd())
答案2
您可以像这样使用 find 命令:
$ find . -type d -exec test -e {}/Makefile \; -print -prune
详细地:
$ find . # find starting in the current directory \
-type d # only look at directories \
-exec test -e {}/Makefile \; # test if Makefile exists in the directory \
-print # print the directory name and path \
-prune # stop searching once we find a Makefile
(不确定这是否真的会与注释/行继续一起运行......)
最好的一点是,由于它是找到的,所以你可以做更聪明的事情,而不仅仅是打印名字。