Was ist der schnellste, optimierteste und einzeiligste Weg, um ein Array der Verzeichnisse (ohne Dateien) in Ruby abzurufen?
Wie wäre es mit Dateien?
ruby
filesystems
recursion
Lance Pollard
quelle
quelle
Antworten:
Anstelle von können
Dir.glob(foo)
Sie auch schreibenDir[foo]
(Dir.glob
kann aber auch einen Block nehmen, in welchem Fall es jeden Pfad ergibt, anstatt ein Array zu erstellen).Ruby Glob Docs
quelle
Dir.glob("**/")
Sie, es sei denn, Sie möchten auch SymlinksFile::FNM_DOTMATCH
Flag, um Punktedateien in die Übereinstimmungsergebnisse aufzunehmen .Dir.glob("**/*", File::FNM_DOTMATCH)
Ich glaube, keine der Lösungen hier befasst sich mit versteckten Verzeichnissen (zB '.test'):
quelle
Find.find('/tmp').collect {|_|_}
War hilfreich für michFür eine Liste der Verzeichnisse versuchen Sie
Die Liste der Dateien ist schwieriger, da im Unix-Verzeichnis auch eine Datei vorhanden ist. Sie müssen daher den Typ testen oder Einträge aus der zurückgegebenen Liste entfernen, die anderen Einträgen übergeordnet ist.
Und für die Liste aller Dateien und Verzeichnisse einfach
quelle
Schneller Einzeiler
Nur Verzeichnisse
Verzeichnisse und normale Dateien
Reiner schöner Rubin
quelle
end.select {}.flatten()
Teil erklären ? Ich mag die Funktion insgesamt. Es sieht so aus, als würde dadurch ein Array von Arrays erstellt. Wäre es möglich, denelseif
Teil mit: zu machen,rec_path(child, file) << child.to_s
damit Sie ihn einem Array zuweisen und ein Array von Zeichenfolgen erhalten können? Vielen Dank!Wie in anderen Antworten hier angegeben, können Sie verwenden
Dir.glob
. Beachten Sie, dass Ordner viele seltsame Zeichen enthalten können und Glob-Argumente Muster sind, sodass einige Zeichen eine besondere Bedeutung haben. Daher ist es unsicher, Folgendes zu tun:Tun Sie stattdessen:
quelle
In PHP oder anderen Sprachen müssen Sie einige Codezeilen schreiben, um den Inhalt eines Verzeichnisses und aller seiner Unterverzeichnisse abzurufen. In Ruby sind jedoch zwei Zeilen erforderlich:
Dadurch wird der Inhalt des aktuellen Verzeichnisses und aller seiner Unterverzeichnisse gedruckt.
Oder kürzer, Sie können die
’**’
Notation verwenden:Wie viele Zeilen werden Sie in PHP oder Java schreiben, um das gleiche Ergebnis zu erzielen?
quelle
Obwohl dies keine einzeilige Lösung ist, denke ich, dass dies der beste Weg ist, dies mit Ruby-Anrufen zu tun.
Löschen Sie zuerst alle Dateien rekursiv.
Zweitens löschen Sie alle leeren Verzeichnisse
quelle
Hier ist ein Beispiel, das die dynamische Erkennung eines Rails-Projektverzeichnisses mit Dir.glob kombiniert:
quelle
config.assets.paths << Rails.root.join("app", "assets", "*")
, konnte aber immer noch die Unterordner und Dateien im Assets-Ordner vonRails.application.config.assets.paths
Punkte geben nichts zurück, verwenden Sie kompakt
quelle