Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

Thành Thạo Thao Thác Thư Mục Ruby: Liệt Kê, Điều Hướng, Và Tạo Thư Mục

Bạn có biết rằng bạn có thể điều hướng hệ thống tệp của mình với Ruby?

Với lớp Ruby „Dir“.

Bạn có thể liệt kê các mục thư mục, thay đổi thư mục hiện tại & thậm chí tạo thư mục mới!

Ví dụ:

filenames = Dir.entries(".")

Phương thức entries này trả về mảng các mục tên tệp. Mỗi mục là chuỗi, vì vậy bạn sẽ cần kết hợp với lớp File của Ruby nếu thực sự muốn đọc các tệp này.

Btw, dấu chấm (.) đại diện cho thư mục hiện tại.

Đây sẽ là thư mục code của bạn đang chạy, KHÔNG phải thư mục bạn (trong terminal) khi chạy code.

Bởi vì thế…

Có thể hữu ích kiểm tra thư mục hiện tại bằng phương thức Dir.pwd.

Bây giờ:

Hãy học cách dùng lớp Dir để tạo thư mục mới (mkdir), đổi tên (mv), và tìm tên tệp theo mẫu cụ thể (glob).

Dùng Phương Thức Mkdir Của Ruby Để Tạo Thư Mục Mới

Nếu bạn muốn tạo thư mục mới với Ruby, bạn có thể dùng phương thức Dir.mkdir.

Ví dụ:

Dir.mkdir("testing")

Nếu cho đường dẫn tương đối, thư mục này được tạo dưới đường dẫn hiện tại (Dir.pwd).

Bạn có thể gặp một vài lỗi:

  • Thư mục đã tồn tại (Errno::EEXIST)
  • Từ chối quyền truy cập (Errno::EACCES)
  • Bạn đang cố tạo thư mục dưới thư mục khác chưa tồn tại (Errno::ENOENT)

Lỗi cuối thường xảy ra khi bạn cố tạo thư mục lồng nhau.

Hoặc nếu bạn dùng đường dẫn tuyệt đối không tồn tại.

Hai giải pháp:

  • Kiểm tra thư mục có tồn tại trước khi tạo (với Dir.exists?)
  • Dùng lớp nâng cao hơn (phần tiếp theo)

Hãy tiếp tục học!

Các Thao Tác Nâng Cao Với Module FileUtils

Nếu bạn cần thêm chút sức mạnh, bạn có thể đưa vào module FileUtils từ thư viện chuẩn.

Nó bao gồm phương thức như mkdir_p tạo thư mục lồng nhau trong một bước.

Ví dụ:

require 'fileutils'
FileUtils.mkdir_p("/tmp/testing/a/b")

Khá cool, phải không?

Đó chưa phải tất cả, FileUtils cũng mang thêm tùy chọn cho tất cả thao tác tệp dưới dạng keyword arguments. Như tùy chọn verbose (in lệnh Linux) & noop (không thay đổi tệp).

Hãy thử nó!

Cách Đổi Tên Thư Mục

Ruby cho phép bạn làm mọi thao tác bạn có thể làm từ giao diện người dùng hệ điều hành, hoặc từ terminal.

Ví dụ…

Bạn có thể đổi tên thư mục như sau:

FileUtils.mv("/tmp/a", "/tmp/b")

Bạn cũng cần dùng FileUtils ở đây vì mv không có sẵn trên lớp Dir.

Cách Thay Đổi Thư Mục Hiện Tại

Vì tất cả thao tác thư mục chạy từ thư mục hiện tại, bạn có thể muốn thay đổi nó.

Bạn có thể dùng phương thức Dir.chdir để làm điều này.

Ví dụ:

Dir.chdir("/tmp") { Dir.entries(".") }

Điều này hoạt động theo hai cách:

  • Với block, thư mục hiện tại chỉ thay đổi cho code bên trong block
  • Không có block, nó thay đổi cho tất cả code sau lời gọi phương thức

Chú ý chdir chỉ hoạt động trong tiến trình Ruby của bạn, nó không ảnh hưởng đến „thế giới bên ngoài“.

Nói cách khác…

Nó sẽ KHÔNG thay đổi thư mục làm việc của shell sau khi chương trình Ruby dừng chạy.

Liệt Kê Tệp & Thư Mục Với Khớp Mẫu

Muốn tìm tất cả tệp Ruby trong thư mục? Việc dễ dàng với phương thức glob!

Ví dụ:

Dir.glob("*.rb")

Bạn có thể dùng bất kỳ phần mở rộng nào, như „.txt“, hoặc „.yml“. Hoặc bất kỳ văn bản nào là một phần của tên tệp.

Muốn tìm tệp bên trong tất cả thư mục?

Được, nó có thể:

Dir.glob("**/*.rb")

Kết quả là mảng với tất cả tên tệp, bao gồm đường dẫn tương đối. Bạn có thể bỏ đường dẫn & chỉ lấy tên tệp bằng cách dùng phương thức File.basename trên mỗi tệp của danh sách bạn nhận từ glob.

Tóm Tắt

Bạn đã học cách làm việc với thư mục trong Ruby dùng lớp Dir & FileUtils.

Bây giờ đến lượt bạn đưa vào thực hành.

Cảm ơn bạn đã đọc! 🙂