Groovy Verzeichnis durchsuchen

scorpionesc

Mitglied
Hallo zusammen,

ich brauche wieder einmal Eure Profiunterstützung.

Mit welchem Schnipsel Code kann ich bspw. die Datei "Sonnenblumen.txt" rekursiv in dem Verzeichnis: "C:\Blumenarten" suchen?

Der Ordner "Blumenarten" hat mehrere Unterordner, die auch nochmal unterteilt sind. In jedem Ordner soll diese Datei gesucht werden.

Habe schon versucht ein bisschen zu googeln, leider klappt das entscheidene Transferdenken nicht :-(

Ich möchte das gerne in Groovy umsetzen.

Vielen Dank für Eure Unterstützung.

Björn
 
Zuletzt bearbeitet:

scorpionesc

Mitglied
Den Link habe ich auch gefunden.

Könntest du mir vielleicht noch sagen, wo ich meinen Dateinamen und meinen Ordner hinterlegen muss? :bahnhof:

Vielen Dank.

Björn
 

Sonecc

Gesperrter Benutzer
Code:
def findFileRecursive( directoryName, filePattern) {
   def fileFound
   def directory = new File(directoryName)
   if (directory.isDirectory()){
      def findFilenameClosure = { if (filePattern.matcher(it.name).find()){  fileFound = it } }
      directory.eachFileRecurse(findFilenameClosure)
    }
    return fileFound
}

Wenn man sich die Parameter anschaut, würde ich sagen, dass der Ordner als erster Parameter und der Dateinamenspattern als 2. Argument gesetzt wird.

directoryName dürfte ein string sein
filePattern müsste ein Regex-Pattern sein (siehe Groovy - Regular Expressions)
 

scorpionesc

Mitglied
Mittlerweile habe ich so ein halbfertiges Ergebnis, dass ich auch nutzen könnte.

Jetzt bräuchte ich nochmal bitte Optimierungsunterstützung :oops:

Mein Ergebnis:

Java:
def directoryName = args[0]
def fileSubStr = args[1]
def filePattern = ~/${fileSubStr}/
def directory = new File(directoryName)
println("Check " + fileSubStr)
def findFilenameClosure =
{
if (filePattern.matcher(it.name).find())
{
println "OK"
} 
}
directory.eachFileRecurse(findFilenameClosure)

Ich starte meine Groovy-Datei über eine Batchdatei, die eine TXT-Datei mit den zu suchenden Dateinamen ausließt (args[1]) und das Zielverzeichnis übergibt.
Code:
for /f %%i in (liste.txt) do (%GROOVY_HOME%\bin\groovy abgleich.groovy D:\Suchen\test %%i)

M. E. ist das seehr langsam und ich kriege auch nur ein OK wenn die Datei gefunden wurde. Wenn die Datei nicht gefunden wurde, passiert leider nichts.

Meine Fragen sind dann jetzt noch:
Wie kann ich alles meinem Groovy-Skript umsetzen?
Wie kann ich ein NOK bei nicht gefundenen Dateien ausgeben?

Vielen Dank für Eure Geduld!!!

Björn
 

Neue Themen


Oben