Obtener nombre de archivo y extensión en Ruby


123

Estoy trabajando en un programa para descargar un video de YouTube, convertirlo a MP3 y crear una estructura de directorios para los archivos.

Mi código es:

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

El primero va a la carpeta de música ya creada. Dentro de eso estoy ejecutando get. Después de eso tengo dos archivos en el directorio: "xyz.mp4" y "xyz.m4a".

Me gustaría buscar el nombre de archivo sin la extensión para poder manejar ambos archivos de manera diferente.

Estoy usando una matriz, pero una matriz para una sola partida me parece una locura.

¿Alguien otra idea?


55
No uses $globalscomo eres. Son una pista muy fuerte de que no entiendes el alcance variable y confías en los globales para "hacer trampa". Son olor a código y conducen a la miseria y al dolor.
el hombre de hojalata

Además rip.to_sy rip.splitno hacer nada.
el hombre de hojalata

Respuestas:


304

Puede usar las siguientes funciones para su 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"

15
Tenga en cuenta que extnes la cadena ".mp4" o incluso la cadena".*" .
Phrogz

Gracias. El problema en este caso es que no sé el nombre de archivo en ese lugar. Solo sé que existen dos archivos. Uno .mp4 y uno .m4a. ¿Cómo puedo obtener esos nombres de archivo?
Sascha Manns

@saigkill usa ". *", comodín, como dijo Phrogz si no sabes / no te importa cuál es la extensión.
Travis Reeder

1
Hay al menos 60 veces hasta ahora que quería besar a la persona que escribió esto
bbozo
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.