Encontre 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 eu quero com find Makefile é:

dir1/Makefile
dir3/Makefile
dir4/dirb/Makefile

Eu 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 própria.

    
por Jérôme 18.07.2012 / 10:16

2 respostas

2

Como realmente não consigo encontrar nada, criei 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())
    
por 18.07.2012 / 11:38
0

Você pode usar o comando find assim:

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

Em detalhes:

$ 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 seria realmente executado com os comentários / continuações de linha ...)

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

    
por 22.08.2012 / 11:48