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?

Sascha Manns
quelle
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"
Stoisch
quelle
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