Obter nome de arquivo e extensão em Ruby

123

Estou trabalhando em um programa para baixar um vídeo do YouTube, convertê-lo em MP3 e criar uma estrutura de diretórios para os arquivos.

Meu código é:

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

O primeiro vai para a pasta de músicas já criada. Dentro disso eu estou executando get. Depois disso, tenho dois arquivos no diretório: "xyz.mp4" e "xyz.m4a".

Gostaria de buscar o nome do arquivo sem a extensão para que eu possa lidar com os dois arquivos de maneira diferente.

Estou usando uma matriz, mas uma matriz para apenas uma partida parece loucura para mim.

Alguém tem outra ideia?

Sascha Manns
fonte
5
Não use $globalscomo você é. Eles são uma dica muito forte de que você não entende o escopo de variáveis ​​e confia nos globais para "trapacear". Eles têm cheiro de código e levam à miséria e à dor.
the Tin Man
Também rip.to_se rip.splitnão faça nada.
the Tin Man

Respostas:

304

Você pode usar as seguintes funções para seu propósito:

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"
Estóico
fonte
15
Observe que extné a string ".mp4" ou mesmo a string".*" .
Phrogz
Obrigado. O problema neste caso é que eu não sei o nome do arquivo nesse local. Eu só sei que existem dois arquivos. Um .mp4 e um .m4a. Como posso obter esses nomes de arquivo?
Sascha Manns
@saigkill use ". *", curinga, como Phrogz disse, se você não sabe / se importa qual é a extensão.
Travis Reeder
1
Há pelo menos 60 vezes até agora eu queria beijar a pessoa que escreveu isso
bbozo