Rubyでファイル名と拡張子を取得する


123

YouTubeからビデオをダウンロードしてMP3に変換し、ファイルのディレクトリ構造を作成するプログラムを開発しています。

私のコードは:

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

最初のものは、すでに作成された音楽フォルダに行きます。その中で私は実行していgetます。その後、ディレクトリに「xyz.mp4」と「xyz.m4a」の2つのファイルがあります。

拡張子なしでファイル名をフェッチして、両方のファイルを異なる方法で処理できるようにしたいと思います。

私は配列を使用していますが、1つのマッチだけの配列は私には奇妙に聞こえます。

誰か他のアイデアはありますか?


5
あなたの$globalsように使用しないでください。これらは、変数のスコープを理解していない非常に強力なヒントであり、グローバルに依存して「不正行為」を行っています。それらはコード臭であり、悲惨さと痛みにつながります。
ブリキ男

またrip.to_srip.split何もしません。
ティンマン

回答:


304

目的に応じて次の関数を使用できます。

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
extn文字列である".mp4" かさえ、文字列".*"
Phrogz 2013

ありがとう。この場合の問題は、その場所のファイル名がわからないことです。私は2つのファイルが存在することを知っています。1つの.mp4と1つの.m4a。どうすればそのファイル名を取得できますか?
Sascha Manns

@saigkillは「。*」、ワイルドカードを使用します。拡張が何であるかわからない場合は、Phrogzが言ったとおりです。
Travis Reeder 2014

1
これまでに少なくとも60回はあります。これを書いた人にキスしたかったの
です。– bbozo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.