Nhận tên tệp và phần mở rộng trong Ruby


123

Tôi đang làm việc trên một chương trình để tải xuống video từ YouTube, chuyển đổi nó thành MP3 và tạo cấu trúc thư mục cho các tệp.

Mã của tôi là:

FileUtils.cd("#{$musicdir}/#{$folder}") do
  YoutubeDlhelperLibs::Downloader.get($url)
  if File.exists?('*.mp4')
    puts 'Remove unneeded tempfile'
    Dir['*.mp4'].each do |waste|
      File.delete(waste)
    end
  else
    puts 'Temporary file already deleted'
  end

  Dir['*.m4a'].each do |rip|
    rip.to_s
    rip.split
    puts 'Inside the function'
    puts rip
  end

end

Cái đầu tiên chuyển đến thư mục nhạc đã được tạo. Bên trong mà tôi đang thực hiện get. Sau đó, tôi có hai tệp trong thư mục: "xyz.mp4" và "xyz.m4a".

Tôi muốn tìm nạp tên tệp mà không có phần mở rộng để tôi có thể xử lý cả hai tệp theo cách khác nhau.

Tôi đang sử dụng một mảng, nhưng một mảng chỉ cho một trận đấu nghe có vẻ điên rồ đối với tôi.

Có ai có ý tưởng khác?


5
Đừng sử dụng $globalsnhư bạn đang có. Chúng là một gợi ý rất mạnh mà bạn không hiểu về phạm vi biến đổi và đang dựa vào các khối cầu để "gian lận". Họ là mùi mã và dẫn đến khốn khổ và đau đớn.
Tin Man

Ngoài ra rip.to_srip.splitkhông làm gì cả.
Tin Man

Câu trả lời:


304

Bạn có thể sử dụng các chức năng sau cho mục đích của mình:

path = "/path/to/xyz.mp4"

File.basename(path)         # => "xyz.mp4"
File.extname(path)          # => ".mp4"
File.basename(path, ".mp4") # => "xyz"
File.basename(path, ".*")   # => "xyz"
File.dirname(path)          # => "/path/to"

15
Lưu ý rằng đó extnlà chuỗi ".mp4" hoặc thậm chí chuỗi".*" .
Phrogz

Cảm ơn. Vấn đề trong trường hợp này là tôi không biết tên tệp trên nơi đó. Tôi chỉ biết rằng có hai tệp hiện có. Một .mp4 và một .m4a. Làm cách nào để lấy tên tệp đó?
Sascha Manns

@saigkill sử dụng ". *", ký tự đại diện, như Phrogz đã nói nếu bạn không biết / quan tâm đến tiện ích mở rộng là gì.
Travis Reeder

1
Có ít nhất 60 lần cho đến nay tôi muốn hôn người viết bài này
bbozo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.