Finde ein Drehbuch mit frühen Ästen beim ersten Auftreten

1

Es muss existieren, mein Problem ist, wie ich mein Bedürfnis ausdrücken kann. Wenn ich nach einem bestimmten Dateinamen suche, möchte ich, dass die Suche den aktuellen Zweig nicht mehr durchsucht, wenn ein erstes Vorkommen festgestellt wird, ABER weiterhin in anderen Zweigen suchen.

Hier ein Beispiel. Dies ist mein aktuelles Verzeichnis:

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

Das Ergebnis, mit dem ich will, find Makefileist:

dir1/Makefile
dir3/Makefile
dir4/dirb/Makefile

Ich habe nichts dagegen, welche Skriptsprache ich verwenden soll, aber ich bevorzuge eine vorhandene Funktion in einer Skriptsprache, anstatt meine eigene zu implementieren.

Jérôme
quelle

Antworten:

2

Da ich wirklich nichts finden kann, habe ich mein eigenes gemacht (in 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
quelle
0

Sie können den Befehl find folgendermaßen verwenden:

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

Im Detail:

$ 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

(Ich bin mir nicht sicher, ob dies tatsächlich mit den Kommentaren / Zeilenfortsetzungen ablaufen würde ...)

Das Beste daran ist, dass Sie, da es gefunden wurde, schlauere Dinge tun können, als nur den Namen zu drucken.

Tom
quelle