Jaki jest najszybszy, najbardziej zoptymalizowany, jednowierszowy sposób na uzyskanie tablicy katalogów (z wyłączeniem plików) w Rubim?
A co z dołączaniem plików?
ruby
filesystems
recursion
Lance Pollard
źródło
źródło
Odpowiedzi:
Zamiast tego
Dir.glob(foo)
możesz także pisaćDir[foo]
(aleDir.glob
może również wziąć blok, w takim przypadku zwróci każdą ścieżkę zamiast tworzenia tablicy).Ruby Glob Docs
źródło
Dir.glob("**/")
chyba że chcesz również linki symboliczneFile::FNM_DOTMATCH
flagi.Dir.glob("**/*", File::FNM_DOTMATCH)
Uważam, że żadne z rozwiązań tutaj nie dotyczy ukrytych katalogów (np. „.Test”):
źródło
Find.find('/tmp').collect {|_|_}
Był dla mnie pomocnyAby uzyskać listę katalogów, spróbuj
Lista plików jest trudniejsza, ponieważ w katalogu Unix znajduje się również plik, więc musisz przetestować typ lub usunąć wpisy z listy zwracanej, która jest rodzicem innych wpisów.
I po prostu lista wszystkich plików i katalogów
źródło
Szybki jeden wkład
Tylko katalogi
Katalogi i zwykłe pliki
Czysty piękny rubin
źródło
end.select {}.flatten()
część? Ogólnie podoba mi się ta funkcja. Wygląda na to, że utworzy tablicę tablic? Czy byłoby możliwe wykonanie tejelseif
części za pomocą:rec_path(child, file) << child.to_s
tak, aby można było przypisać ją do tablicy i uzyskać tablicę ciągów? Dzięki!Jak wspomniano w innych odpowiedziach tutaj, możesz użyć
Dir.glob
. Należy pamiętać, że foldery mogą zawierać wiele dziwnych znaków, a argumenty glob są wzorcami, więc niektóre znaki mają specjalne znaczenie. W związku z tym wykonanie następujących czynności jest niebezpieczne:Zamiast tego zrób:
źródło
W PHP lub innych językach, aby uzyskać zawartość katalogu i wszystkich jego podkatalogów, musisz napisać kilka wierszy kodu, ale w Rubim zajmuje to 2 wiersze:
spowoduje to wydrukowanie zawartości bieżącego katalogu i wszystkich jego podkatalogów.
Lub krócej, możesz użyć
’**’
notacji:Ile wierszy napiszesz w PHP lub Javie, aby uzyskać ten sam wynik?
źródło
Chociaż nie jest to rozwiązanie jednokreskowe, myślę, że jest to najlepszy sposób na zrobienie tego za pomocą wywołań ruby.
Najpierw usuń wszystkie pliki rekurencyjnie. Następnie
usuń wszystkie puste katalogi
źródło
Oto przykład, który łączy dynamiczne wykrywanie katalogu projektu Rails z Dir.glob:
źródło
config.assets.paths << Rails.root.join("app", "assets", "*")
, ale nadal nie widziałem podfolderów i plików w folderze zasobów przezRails.application.config.assets.paths
kropki zwracają zero, użyj compact
źródło