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"라는 두 개의 파일이 있습니다.

두 파일을 다르게 처리 할 수 ​​있도록 확장자없이 파일 이름을 가져오고 싶습니다.

나는 배열을 사용하고 있지만, 하나의 일치에 대한 배열은 나에게 미친 소리로 들립니다.

다른 생각이 있습니까?


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 dec.

감사. 이 경우의 문제는 내가 그 장소의 파일 이름을 모른다는 것입니다. 두 개의 파일이 존재한다는 것만 알고 있습니다. .mp4 하나와 .m4a 하나. 파일 이름을 어떻게 얻을 수 있습니까?
Sascha Manns

@saigkill은 ". *", 와일드 카드를 사용합니다. Phrogz가 말했듯이 확장자가 무엇인지 모르거나 신경 쓰지 않으면 말입니다.
Travis Reeder

1
적어도 60 배있어 지금까지 내가 쓴 사람이 키스하고 싶어
bbozo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.