อย่างที่คนอื่น ๆ บอกไว้Dir::foreachเป็นตัวเลือกที่ดีที่นี่ อย่างไรก็ตามโปรดทราบว่าDir::foreachและDir::entriesจะรวม.และ..(ไดเรกทอรีปัจจุบันและไดเรกทอรีหลัก) เสมอ โดยทั่วไปคุณจะไม่ต้องการทำงานกับพวกเขาดังนั้นคุณสามารถใช้Dir::each_childหรือDir::children(ตามที่แนะนำโดย ma11hew28 ) หรือทำสิ่งนี้:
Dir.foreach('/path/to/dir') do |filename|
next if filename == '.' or filename == '..'
# Do work on the remaining files & directories
end
Dir::foreachและDir::entries(รวมถึงDir::each_childและDir::children) รวมถึงไฟล์และไดเรกทอรีที่ซ่อนอยู่ บ่อยครั้งที่สิ่งนี้เป็นสิ่งที่คุณต้องการ แต่ถ้าไม่ใช่คุณจำเป็นต้องทำบางสิ่งเพื่อข้ามมัน
หรือคุณอาจต้องการดูDir::globว่ามีการจับคู่ไวด์การ์ดแบบง่าย ๆ :
Dir.glob('/path/to/dir/*.rb') do |rb_filename|
# Do work on files & directories ending in .rb
end
Dir.foreachทำงานเพื่อย้ำเนื้อหาของไดเรกทอรีดังนั้นสิ่งอื่น ๆ ที่เกิดขึ้น