1

Должно быть, моя проблема в том, как выразить свою нужду. Когда я ищу заданное имя файла, я хочу, чтобы поиск прекращал поиск в текущей ветви, когда он обнаружил первый случай, НО продолжал поиск в других ветвях.

Вот пример. Это мой текущий каталог:

dir1/Makefile
dir2/
dir3/Makefile
dir3/dira/Makefile
dir4/dirb/Makefile

В результате я хочу find Makefile :

dir1/Makefile
dir3/Makefile
dir4/dirb/Makefile

Я не возражаю против того, какой язык сценариев использовать, но я предпочитаю существующую функцию на языке сценариев вместо реализации своей собственной.

2 ответа2

2

Поскольку я действительно ничего не могу найти, я сделал свой собственный (на питоне)

#!/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())
0

Вы можете использовать команду 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

(не уверен, что это действительно будет работать с комментариями / продолжением строки ...)

Лучше всего то, что, поскольку он найден, вы можете делать более умные вещи, чем просто печатать имя.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .