Wie erhalte ich eine Liste der Ordner, die in einem bestimmten Verzeichnis mit Ruby vorhanden sind?
Dir.entries()
sieht genau aus, aber ich weiß nicht, wie ich mich nur auf Ordner beschränken soll.
ruby
directory
directory-listing
0xC0DEFACE
quelle
quelle
'.'
(aktuelles Verzeichnis) und'..'
(übergeordnetes Verzeichnis des aktuellen Verzeichnisses). In den meisten Fällen möchten Sie mindestens diese beiden entfernen.Dir.entries(root).select { |entry| File.directory? File.join(root, entry) and not entry.in? %w[. ..]}
Dir.glob
.Dir.glob()
in der anderen Antwort zu sehen - ich würde dringend empfehlen, dies stattdessen zu tunIch fand das nützlicher und benutzerfreundlicher:
Es werden alle Ordner im aktuellen Verzeichnis abgerufen, ausgeschlossen
.
und..
.Um Ordner zu rekursieren, verwenden Sie einfach
**
anstelle von*
.Die
Dir.glob
Zeile kann auchDir.chdir
als Block übergeben werden:quelle
**/*
anstelle von verwenden*
.Meiner Meinung nach
Pathname
ist es für Dateinamen viel besser geeignet als für einfache Zeichenfolgen.Dadurch erhalten Sie ein Array aller Verzeichnisse in diesem Verzeichnis als Pfadnamenobjekte.
Wenn Sie Zeichenfolgen haben möchten
Wenn
directory_name
absolut, sind diese Zeichenfolgen auch absolut.quelle
Pathname
ist , dass es automatisch entfernt.
,..
und proprietery Dateien wie.DS_Store
Suchen Sie rekursiv alle Ordner in einem bestimmten Verzeichnis:
Nicht rekursive Version:
Hinweis:
Dir.[]
funktioniert wieDir.glob
.quelle
quelle
Sie können anhand
File.directory?
desFileTest
Moduls herausfinden, ob eine Datei ein Verzeichnis ist. Die Kombination mitDir.entries
ergibt einen schönen (ish) -Liner:Bearbeiten: Aktualisiert gemäß ScottD-Korrektur.
quelle
Mit diesem können Sie das Array eines vollständigen Pfads zu Ihren Verzeichnissen , Unterverzeichnissen und Unterverzeichnissen auf rekursive Weise abrufen . Ich habe diesen Code verwendet, um diese Dateien eifrig in die
config/application
Datei zu laden .Darüber hinaus brauchen wir nicht mit den langweiligen beschäftigen
.
und..
mehr. Die akzeptierte Antwort musste sich mit ihnen befassen.quelle
quelle
reject !
,select
quelle
Für eine generische Lösung möchten Sie wahrscheinlich verwenden
Dies funktioniert mit Pfaden wie
~/*/
(alle Ordner in Ihrem Home-Verzeichnis).quelle
Wir können kombinieren Born Antwort und johannes' Antwort zu bekommen recht eine elegante Lösung zu bekommen , die Verzeichnisnamen in einem Ordner.
quelle
Nur Ordner ('.' Und '..' sind ausgeschlossen):
Dir.glob(File.join(path, "*", File::SEPARATOR))
Ordner und Dateien:
Dir.glob(File.join(path, "*"))
quelle
Ich denke, Sie können jede Datei testen, um festzustellen, ob es sich um ein Verzeichnis mit handelt
FileTest.directory? (file_name)
. Weitere Informationen finden Sie in der Dokumentation zu FileTest .quelle