4 votes

Comment filtrer les résultats de Ruby Find.find() ?

Find.find("d") {|chemin| puts chemin}

Je veux exclure certains types de fichiers, disons *.gif et répertoires.

PS: Je peux toujours ajouter du code à l'intérieur de mon bloc pour vérifier le nom du fichier et le type de répertoire, mais je veux que find filtre les fichiers pour moi.

8voto

BaroqueBobcat Points 6788

Je ne pense pas que vous puissiez demander à find de faire ça. Vous pourriez essayer d'utiliser Dir#[], qui accepte les expressions de recherche de fichier. Si vous recherchez des types de fichiers particuliers, ou des fichiers filtrables avec le langage de motifs de recherche de fichier, cela pourrait mieux correspondre.

par exemple

Dir["dir/**/*.{xml,png,css,html}"]

trouverait tous les fichiers xml, png, css et html dans le répertoire d.

Consultez la documentation pour plus d'informations.

4voto

Vous ne pouvez pas faire find le faire, mais Find peut aider : dans le bloc, vous devez vérifier si le chemin actuel est l'un de ceux que vous souhaitez exclure ou non ; si c'est le cas, appelez Find#prune. Cela semble être l'idiome standard lors de l'utilisation de Find.

Si vous décidez d'utiliser Dir#[] à la place, vous pouvez appeler reject sur son résultat, en passant un bloc pour exclure certains types de fichiers. Cependant, notez que, autant que je sache, Dir#[] lit tout le contenu de votre répertoire d avant de pouvoir filtrer, tandis que Find#prune garantit de ne pas lire le contenu des sous-répertoires élagués si vous l'appelez dans le bloc passé à Find#find.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X