Quel est le moyen le plus rapide et le plus optimisé d'obtenir un tableau des répertoires (à l'exclusion des fichiers) dans Ruby?
Que diriez-vous d'inclure des fichiers?
ruby
filesystems
recursion
Lance Pollard
la source
la source
Réponses:
Au lieu de cela,
Dir.glob(foo)
vous pouvez également écrireDir[foo]
(maisDir.glob
peut également prendre un bloc, auquel cas il donnera chaque chemin au lieu de créer un tableau).Documents sur Ruby Glob
la source
Dir.glob("**/")
sauf si vous voulez également des liens symboliquesFile::FNM_DOTMATCH
indicateur.Dir.glob("**/*", File::FNM_DOTMATCH)
Je pense qu'aucune des solutions ici ne traite des répertoires cachés (par exemple '.test'):
la source
Find.find('/tmp').collect {|_|_}
Était utile pour moiPour la liste des répertoires, essayez
La liste des fichiers est plus difficile, car dans le répertoire Unix est également un fichier, vous devez donc tester le type ou supprimer les entrées de la liste retournée qui est parent d'autres entrées.
Et pour la liste de tous les fichiers et répertoires simplement
la source
Fast one doublure
Seuls les répertoires
Répertoires et fichiers normaux
Beau rubis pur
la source
end.select {}.flatten()
partie? J'aime la fonction dans son ensemble. Il semble que cela créera un tableau de tableaux? Serait-il possible de faire laelseif
partie avec:rec_path(child, file) << child.to_s
pour pouvoir l'assigner à un tableau et obtenir un tableau de chaînes? Merci!Comme indiqué dans d'autres réponses ici, vous pouvez utiliser
Dir.glob
. Gardez à l'esprit que les dossiers peuvent contenir beaucoup de caractères étranges et que les arguments glob sont des modèles, donc certains caractères ont des significations spéciales. En tant que tel, il est dangereux de faire quelque chose comme ce qui suit:Faites plutôt:
la source
En PHP ou dans d'autres langages pour obtenir le contenu d'un répertoire et de tous ses sous-répertoires, vous devez écrire quelques lignes de code, mais en Ruby cela prend 2 lignes:
cela imprimera le contenu du répertoire courant et tous ses sous-répertoires.
Ou plus court, vous pouvez utiliser la
’**’
notation:Combien de lignes allez-vous écrire en PHP ou en Java pour obtenir le même résultat?
la source
Bien que ce ne soit pas une solution à une ligne, je pense que c'est la meilleure façon de le faire en utilisant des appels ruby.
Supprimez d'abord tous les fichiers de manière récursive
Deuxième supprimez tous les répertoires vides
la source
Voici un exemple qui combine la découverte dynamique d'un répertoire de projet Rails avec Dir.glob:
la source
config.assets.paths << Rails.root.join("app", "assets", "*")
, mais je ne pouvais toujours pas voir les sous-dossiers et les fichiers dans le dossier assets parRails.application.config.assets.paths
les points renvoient nul, utilisez compact
la source