Dapatkan nama file dan ekstensi di Ruby

123

Saya sedang mengerjakan sebuah program untuk mendownload video dari YouTube, mengubahnya menjadi MP3 dan membuat struktur direktori untuk file tersebut.

Kode saya adalah:

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

Yang pertama masuk ke folder musik yang sudah dibuat. Di dalam yang saya jalankan get. Setelah itu saya memiliki dua file di direktori: "xyz.mp4" dan "xyz.m4a".

Saya ingin mengambil nama file tanpa ekstensi sehingga saya dapat menangani kedua file secara berbeda.

Saya menggunakan array, tetapi array hanya untuk satu pertandingan terdengar gila bagi saya.

Adakah yang punya ide lain?

Sascha Manns
sumber
5
Jangan gunakan $globalsseperti Anda. Mereka adalah petunjuk yang sangat kuat bahwa Anda tidak memahami pelingkupan variabel dan mengandalkan global untuk "curang". Mereka berbau kode dan menyebabkan kesengsaraan dan rasa sakit.
Manusia Timah
Juga rip.to_sdan rip.splittidak melakukan apa-apa.
Manusia Timah

Jawaban:

304

Anda dapat menggunakan fungsi berikut untuk tujuan Anda:

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"
Sangat tabah
sumber
15
Perhatikan itu extnstring ".mp4" atau bahkan string".*" .
Phrogz
Terima kasih. Masalah dalam kasus ini adalah, saya tidak tahu nama file di tempat itu. Saya baru tahu bahwa ada dua file. Satu .mp4 dan satu .m4a. Bagaimana saya bisa mendapatkan nama file itu?
Sascha Manns
@saigkill use ". *", wildcard, seperti yang dikatakan Phrogz jika Anda tidak tahu / peduli apa ekstensinya.
Travis Reeder
1
Setidaknya ada 60 kali sejauh ini saya ingin mencium orang yang menulis ini
bbozo