Encontre um script com ramificações iniciais nas primeiras ocorrências

1

Deve existir, meu problema é como expressar minha necessidade. Quando procuro por um determinado nome de arquivo, quero que a pesquisa pare de pesquisar a ramificação atual quando encontrar uma primeira ocorrência, MAS continue pesquisando em outras ramificações.

Aqui um exemplo. Este é o meu diretório atual:

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

O resultado que quero com find Makefile é:

dir1/Makefile
dir3/Makefile
dir4/dirb/Makefile

Não me importo com qual linguagem de script usar, mas prefiro uma função existente em uma linguagem de script em vez de implementar a minha.

Jérôme
fonte

Respostas:

2

Como eu realmente não consigo encontrar nada, eu fiz o meu próprio (em 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())
Jérôme
fonte
0

Você pode usar o comando find assim:

$ find . -type d -exec test -e {}/Makefile \; -print -prune

Em detalhe:

$ 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

(não tenho certeza se isso realmente funcionaria com os comentários / continuações de linha ...)

A melhor parte é que, desde a descoberta, você pode fazer coisas mais inteligentes do que apenas imprimir o nome.

Tom
fonte