Apa cara tercepat, paling optimal, satu-liner untuk mendapatkan array direktori (tidak termasuk file) di Ruby?
Bagaimana dengan menyertakan file?
ruby
filesystems
recursion
Lance Pollard
sumber
sumber
Jawaban:
Selain
Dir.glob(foo)
Anda juga dapat menulisDir[foo]
(namunDir.glob
juga dapat mengambil blok, dalam hal ini akan menghasilkan setiap jalur alih-alih membuat larik).Ruby Glob Docs
sumber
Dir.glob("**/")
kecuali Anda juga ingin symlinksFile::FNM_DOTMATCH
bendera.Dir.glob("**/*", File::FNM_DOTMATCH)
Saya yakin tidak ada solusi di sini yang berhubungan dengan direktori tersembunyi (misalnya '.test'):
sumber
Find.find('/tmp').collect {|_|_}
Sangat membantu bagi sayaUntuk daftar direktori coba
Daftar file lebih sulit, karena di direktori Unix juga ada file, jadi Anda perlu menguji jenis atau menghapus entri dari daftar yang dikembalikan yang merupakan induk dari entri lain.
Dan untuk daftar semua file dan direktori secara sederhana
sumber
Cepat satu kapal
Hanya direktori
Direktori dan file normal
Ruby yang indah dan murni
sumber
end.select {}.flatten()
bagian itu? Saya suka fungsinya secara keseluruhan. Sepertinya itu akan membuat array array? Apakah mungkin untuk melakukanelseif
bagian tersebut dengan:rec_path(child, file) << child.to_s
sehingga Anda bisa menugaskannya ke sebuah array dan mendapatkan sebuah array string? Terima kasih!Seperti yang disebutkan dalam jawaban lain di sini, Anda dapat menggunakan
Dir.glob
. Perlu diingat bahwa folder dapat memiliki banyak karakter aneh di dalamnya, dan argumen glob adalah pola, jadi beberapa karakter memiliki arti khusus. Karena itu, tidak aman untuk melakukan sesuatu seperti berikut ini:Sebaliknya lakukan:
sumber
Di PHP atau bahasa lain untuk mendapatkan konten dari sebuah direktori dan semua subdirektorinya, Anda harus menulis beberapa baris kode, tetapi di Ruby dibutuhkan 2 baris:
ini akan mencetak konten dari direktori saat ini dan semua subdirektorinya.
Atau lebih pendek, Anda dapat menggunakan
’**’
notasi:Berapa banyak baris yang akan Anda tulis dalam PHP atau Java untuk mendapatkan hasil yang sama?
sumber
Meskipun bukan solusi satu baris, saya rasa ini adalah cara terbaik untuk melakukannya menggunakan panggilan ruby.
Pertama hapus semua file secara rekursif
Kedua hapus semua direktori kosong
sumber
Berikut adalah contoh yang menggabungkan penemuan dinamis dari direktori proyek Rails dengan Dir.glob:
sumber
config.assets.paths << Rails.root.join("app", "assets", "*")
, tetapi masih tidak dapat melihat sub-folder dan file di dalam folder aset olehRails.application.config.assets.paths
titik kembali nihil, gunakan kompak
sumber