Holen Sie sich den Dateinamen und die Erweiterung in Ruby


123

Ich arbeite an einem Programm, um ein Video von YouTube herunterzuladen, es in MP3 zu konvertieren und eine Verzeichnisstruktur für die Dateien zu erstellen.

Mein Code lautet:

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

Der erste geht in den bereits erstellten Musikordner. Darin führe ich aus get. Danach habe ich zwei Dateien im Verzeichnis: "xyz.mp4" und "xyz.m4a".

Ich möchte den Dateinamen ohne die Erweiterung abrufen, damit ich beide Dateien unterschiedlich behandeln kann.

Ich verwende ein Array, aber ein Array für nur ein Match klingt für mich verrückt.

Hat jemand eine andere Idee?


5
Benutze nicht so $globalswie du bist. Sie sind ein sehr starker Hinweis darauf, dass Sie das variable Scoping nicht verstehen und sich beim "Betrügen" auf Globale verlassen. Sie riechen nach Code und führen zu Elend und Schmerz.
der Blechmann

Auch rip.to_sund rip.splitnichts tun.
der Blechmann

Antworten:


304

Sie können die folgenden Funktionen für Ihren Zweck verwenden:

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
Beachten Sie, dass dies extndie Zeichenfolge ".mp4" oder sogar die Zeichenfolge ist".*" .
Phrogz

Vielen Dank. Das Problem in diesem Fall ist, dass ich den Dateinamen an diesem Ort nicht kenne. Ich weiß nur, dass zwei Dateien vorhanden sind. Eine .mp4 und eine .m4a. Wie kann ich diese Dateinamen bekommen?
Sascha Manns

@saigkill benutze ". *", Platzhalter, wie Phrogz sagte, wenn du nicht weißt / dich nicht darum kümmerst, was die Erweiterung ist.
Travis Reeder

1
Es gibt mindestens 60 Mal bis jetzt wollte ich die Person küssen, die dies schrieb
bbozo
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.