Uzyskaj nazwę i rozszerzenie pliku w Rubim

123

Pracuję nad programem do pobierania wideo z YouTube, konwertowania go do formatu MP3 i tworzenia struktury katalogów dla plików.

Mój kod to:

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

Pierwsza trafia do już utworzonego folderu muzycznego. Wewnątrz tego wykonuję get. Następnie mam w katalogu dwa pliki: „xyz.mp4” i „xyz.m4a”.

Chciałbym pobrać nazwę pliku bez rozszerzenia, aby móc obsługiwać oba pliki inaczej.

Używam tablicy, ale tablica tylko dla jednego dopasowania brzmi dla mnie szalenie.

Czy ktoś inny pomysł?

Sascha Manns
źródło
5
Nie używaj $globalstak, jak jesteś. Są bardzo mocną wskazówką, że nie rozumiesz zakresu zmiennych i polegasz na globalnych, aby „oszukiwać”. Mają zapach kodu i prowadzą do nieszczęścia i bólu.
Tin Man
Również rip.to_si rip.splitnic nie robić.
Tin Man

Odpowiedzi:

304

Możesz użyć następujących funkcji do swojego celu:

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"
Stoicki
źródło
15
Zauważ, że extnjest to ciąg ".mp4" lub nawet ciąg".*" .
Phrogz,
Dzięki. Problem w tym przypadku polega na tym, że nie znam nazwy pliku w tym miejscu. Po prostu wiem, że istnieją dwa pliki. Jeden .mp4 i jeden .m4a. Jak mogę uzyskać te nazwy plików?
Sascha Manns
@saigkill użyj ". *", symbolu wieloznacznego, jak powiedział Phrogz, jeśli nie wiesz / nie obchodzi cię, jakie jest rozszerzenie.
Travis Reeder
1
Do tej pory przynajmniej 60 razy chciałem pocałować osobę, która to napisała
bbozo