Ich habe eine Dateihierarchie und einige der Unterverzeichnisse sind relative symbolische Verknüpfungen. Ich verwende Rubys Find.find
, um durch diese Verzeichnisse zu blättern und einige spezifische Dateien zu finden. Es sucht jedoch nicht in irgendeinem Verzeichnis, das ein Symlink ist (es folgt Dateien, die Symlinks sind).
Wenn Sie sich den Quellcode ansehen, liegt das Problem daran, dass File.lstat(file).directory?
verwendet wird, um zu testen, ob etwas ein Verzeichnis ist . Dies gibt false
für symbolische Links zurück, aber File.stat.directory?
gibt true
zurück.
Wie kann ich Find.find
Symlinks folgen lassen, ohne dass Affen damit gepatcht werden, um File.stat
anstelle von File.lstat
zu verwenden?
Ich bin auf die ähnliche Situation gestoßen und habe beschlossen, dem wahren Pfad ohne zusätzliches Juwel zu folgen.
%Vor%Auf diese Weise kann der ursprüngliche Pfad nicht mit einem symbolischen Link beibehalten werden, aber im Moment ist das für mich in Ordnung.
Verwenden Sie die Datei-finden-Bibliothek von Daniel J. Berger. Es ist als Ruby Juwel erhältlich. Dann können Sie rekursiv mit finden:
%Vor%NB: entgegen der Dokumentation und Intuition, Einstellung: follow = & gt; false wird File :: Find tatsächlich dazu bringen, allen Symlinks zu folgen, zumindest auf meinem Rechner (Ubuntu 10.04, Ruby 1.8.7, File-Find 0.3.4).
Es gibt eine Reihe anderer Optionen für File :: Find, wie Namensmuster, Dateityp, atime, ctime, mtime usw. Sehen Sie sich den RDoc an.
warum nicht stattdessen Dir
verwenden? Es folgt Symlinks
Oder Sie können alib
Um Dir
rekursiv nach Dateien zu suchen, versuchen Sie das Doppelsternchen Dir["**/*"]
Schrieb eine andere Option mit Schleifenprüfung und nur begrenzter Rekursion. Funktioniert auch mit jruby.
Hier ist ein Kern: Ссылка