2010-08-17 34 views
20

Có cách nào dễ dàng trong Ruby để tìm đường dẫn tệp chuẩn trên một đường dẫn tệp lộn xộn không?Đường dẫn tệp Canonical trong Ruby

Ví dụ:

  • a/b/../c/x cũng giống như a/c/x
  • a/./b/c/x cũng giống như a/b/c/x
  • a/./b/../../c/x cũng giống như c/x

Bất kỳ cách đơn giản để làm điều này?

Trả lời

27
require 'pathname' 

Pathname.new("a/b/../c/x").cleanpath 
+4

'đòi hỏi 'pathname.rb'' – JellicleCat

+2

Nếu bạn muốn thoát khỏi symlink quá (như 'canonicalFilePath' Qt của) sau đó sử dụng' realpath' thay vì 'cleanpath'. –

+2

@Erik Bạn nên biết rằng 'đường dẫn thực', không giống như 'đường dẫn sạch ', truy cập hệ thống tập tin và không thành công nếu đường dẫn không tồn tại. – hagello

20

File.expand_path (file_name [, dir_string]) → abs_file_name

Chuyển đổi một tên đường dẫn đến một tên đường dẫn tuyệt đối. Các đường dẫn tương đối được tham chiếu từ thư mục làm việc hiện tại của tiến trình trừ khi dir_string được đưa ra, trong trường hợp này nó sẽ được sử dụng làm điểm bắt đầu. Tên đường dẫn đã cho có thể bắt đầu bằng số ~, mở rộng đến thư mục chính của chủ sở hữu quá trình (biến môi trường HOME phải được đặt chính xác). ~user mở rộng đến thư mục chính của người dùng được đặt tên.

File.expand_path("~oracle/bin")   #=> "/home/oracle/bin" 
File.expand_path("../../bin", "/tmp/x") #=> "/bin" 
Các vấn đề liên quan