Comment puis-je obtenir une liste de seulement fichiers à l'aide de Dir.glob?
Comment puis-je retourner une liste uniquement les fichiers, pas les répertoires dans un répertoire spécifié?
J'ai my_list = Dir.glob(script_path.join("*"))
Cela renvoie tout dans le répertoire,y compris les sous-répertoires. J'ai cherché mais je n'ai pas été en mesure de trouver la réponse.
OriginalL'auteur user982570 | 2011-10-06
Vous devez vous connecter pour publier un commentaire.
En plus de la Marque de réponse,
Dir.entries
de redonner répertoires. Si vous voulez juste les fichiers, vous pouvez tester chaque entrée pour voir si c'est un fichier ou un répertoire, en utilisantfile?
.Remplacer
/home/theiv
avec n'importe quel répertoire vous souhaitez rechercher des fichiers dans.Aussi, jetez un oeil à Fichier. Il fournit un tas de tests et de propriétés que vous pouvez récupérer sur les fichiers.
File.file?("/home/theiv/#{f}")
dans la section mapping: sélectionnez {|f| Fichier.fichier?(f)}, |f| est juste le nom de fichier, pas de chemin d'accès complet. Si vous avez besoin pour composer un complet, disons Fichier.fichier?("/home/theiv/#{f}"), sinon ça ne marche pas. Ou de manière plus simple, utiliser: !Fichier.répertoire(f) à la place.
OriginalL'auteur theIV
Dir.glob('*').select { |fn| File.file?(fn) }
OriginalL'auteur Zepplock
Entrées de ne pas faire rescursion je pense. Si vous souhaitez que les fichiers dans les sous-dossiers également utiliser
OriginalL'auteur peter
Si vous voulez le faire en une seule fois au lieu de créer d'abord un tableau et puis en itérant sur elle avec
select
, vous pouvez faire quelque chose comme:OriginalL'auteur Michael Kohl
Vous pouvez utiliser
Dir[]
/Dir.glob
ouDir.entries
pour obtenir la liste des fichiers. La différence entre eux est le premier renvoie le chemin complet, et celle-ci retourne le nom du fichier seulement.Donc être prudent sur le mappage suivant segment
.select {|f| File.file?(f)}
: avec chemin d'accès complet, il fonctionne bien, alors qu'avec seulement le nom de fichier, il travaille parfois filaire.ARY:
Dir[], Dir.glob, Dir.entrées
OriginalL'auteur karl li
Suivant @karl-li la suggestion de @theIV solution, j'ai trouvé que cela fonctionne bien:
OriginalL'auteur ReggieB
vous pouvez simplement obtenir les noms de fichiers avec
File.basename(file)
OriginalL'auteur Erym
Il semble que vous êtes à la recherche pour
Dir.entrées
:Si la recherche sur Google pour savoir comment résoudre ce problème n'est pas tous les résultats, vous pouvez regarder à travers la documentation de Ruby.
Dir.entries
renvoie à la fois les fichiers et sous-répertoires, et est similaire àglob
sans le masque de nom de fichier. ` Dir.les entrées("testdir") #=> [".", "..", "config.h", "principal.rb"]`. Les deux premières valeurs retournées sont des répertoires.OriginalL'auteur Mark Rushakoff