Wie kann man Ruby's Find.find Symlinks folgen lassen?

8

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?

    
arnab 20.10.2010, 01:20
quelle

6 Antworten

0

Für jeden, der zuschaut, habe ich Pathname und den folgenden rekursiven Code verwendet:

%Vor%     
arnab 16.04.2011, 22:26
quelle
5

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.

    
user3055549 01.12.2013 22:54
quelle
3

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.

    
Futzilogik 14.04.2011 16:22
quelle
1

warum nicht stattdessen Dir verwenden? Es folgt Symlinks Oder Sie können alib

ausprobieren

Um Dir rekursiv nach Dateien zu suchen, versuchen Sie das Doppelsternchen Dir["**/*"]

    
ghostdog74 20.10.2010 01:45
quelle
0

Schrieb eine andere Option mit Schleifenprüfung und nur begrenzter Rekursion. Funktioniert auch mit jruby.

Hier ist ein Kern: Ссылка

    
akostadinov 09.09.2014 09:04
quelle
0

Hier ist eine einfachere und effizientere Version der rekursiven Pathname-Methode:

%Vor%     
fotinakis 06.06.2017 04:36
quelle

Tags und Links