Ich versuche, Ruby zu schreiben, der ein bestimmtes Verzeichnis rekursiv nach allen leeren untergeordneten Verzeichnissen durchsuchen und entfernen würde.
Gedanken?
Hinweis: Ich hätte gerne eine Skriptversion, wenn möglich. Dies ist sowohl ein praktisches Bedürfnis als auch etwas, das mir beim Lernen hilft.
Betrachten Sie die Beispiele von kch, dB. und Vishnu oben habe ich einen One-Liner zusammengestellt, den ich für eine elegantere Lösung halte:
%Vor% Ich verwende '**/'
anstelle von '/**/*'
für den glob, der nur Verzeichnisse zurückgibt, so dass ich später nicht testen muss, ob es ein Verzeichnis ist. Ich benutze reverse_each
anstelle von sort.reverse.each
, da es kürzer und angeblich effizienter ist, nach diesem posten . Ich bevorzuge Dir.entries(d).size == 2
bis (Dir.entries(d) - %w[ . .. ]).empty?
, weil es ein wenig einfacher zu lesen und zu verstehen ist, obwohl (Dir.entries(d) - %w[ . .. ]).empty?
wahrscheinlich besser funktionieren würde, wenn Sie Ihr Skript unter Windows ausführen müssten.
Ich habe das unter Mac OS X ziemlich oft getestet und es funktioniert auch mit rekursiven leeren Verzeichnissen.
wie im ersten Beispiel, aber das erste Beispiel scheint das rekursive Bit nicht zu behandeln. Die Sortierung und Umkehrung stellt sicher, dass wir zuerst mit den verschachtelten Verzeichnissen umgehen.
Ich nehme an, sort.reverse könnte als sort {|a,b| b <=> a}
für Effizienz
Ich habe dieses Skript unter OS X getestet, aber unter Windows müssen Sie Änderungen vornehmen.
Sie können die Dateien in einem Verzeichnis, einschließlich versteckter Dateien, mit Dir # -Einträgen finden.
Dieser Code löscht Verzeichnisse, die nach dem Löschen von Unterverzeichnissen leer werden.
%Vor%