Ruby'de dosya adını ve uzantısını alın


123

YouTube'dan bir video indirmek, MP3'e dönüştürmek ve dosyalar için bir dizin yapısı oluşturmak için bir program üzerinde çalışıyorum.

Benim kodum:

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

İlki, önceden oluşturulmuş müzik klasörüne gider. Ben onun içinde icra ediyorum get. Bundan sonra dizinde iki dosyam var: "xyz.mp4" ve "xyz.m4a".

Dosya adını uzantı olmadan getirmek istiyorum, böylece her iki dosyayı farklı şekilde ele alabilirim.

Bir dizi kullanıyorum, ancak tek bir eşleşme için bir dizi benim için çılgınca geliyor.

Başka bir fikri olan var mı?


5
Olduğun $globalsgibi kullanma . Değişken kapsam belirlemeyi anlamadığınız ve "hile yapmak" için globallere güvenmeniz çok güçlü bir ipucudur. Kod kokusu yaparlar ve sefalet ve acıya yol açar.
The Tin Man

Ayrıca rip.to_sve rip.splithiçbir şey yapmayın.
The Tin Man

Yanıtlar:


304

Amacınız için aşağıdaki işlevleri kullanabilirsiniz:

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
Bunun extndize ".mp4" veya hatta".*" dize olduğunu unutmayın .
Phrogz

Teşekkürler. Bu durumda sorun şu ki, o yerin dosya adını bilmiyorum. Sadece iki dosyanın var olduğunu biliyorum. Bir .mp4 ve bir .m4a. Bu dosya adlarını nasıl alabilirim?
Sascha Manns

@saigkill, uzantının ne olduğunu bilmiyorsanız / umursamıyorsanız Phrogz'un dediği gibi ". *" joker karakterini kullanın.
Travis Reeder

1
Şimdiye kadar en az 60 kez bunu yazan kişiyi öpmek istedim
bbozo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.