อย่างที่คนอื่น ๆ บอกไว้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
ทำงานเพื่อย้ำเนื้อหาของไดเรกทอรีดังนั้นสิ่งอื่น ๆ ที่เกิดขึ้น