find, cat 등을 사용하여 앨범 재생 목록에서 M3U 재생 목록을 생성하세요.

find, cat 등을 사용하여 앨범 재생 목록에서 M3U 재생 목록을 생성하세요.

각 폴더에 "playlist.m3u"(*.m3u8과 일치해야 함)라는 제목의 선택된 재생 목록이 있는 음악 폴더가 있습니다.

내가 원하는 것은 쉘 스크립트가 선택된 모든 트랙과 연결된 재생 목록을 생성하도록 하는 것입니다. 단, 재생목록이 제대로 작동하려면 노래 제목 앞에 폴더 이름을 추가해야 합니다.

다음은 디렉터리 구조의 예입니다.

Main Folder
 `-> Album 1/
       *.flac
       playlist.m3u
 `-> Album 2/
       *.flac
       playlist.m3u
 `-> Album 3/
       *.mp3
       playlist.m3u

생성된 main-playlist.m3u 파일은 다음과 같습니다.

Album 1/01. Song1.flac
Album 1/02. Song2.flac
Album 1/03. Song3.flac
Album 1/04. Song4.flac
Album 2/1-01. Song1 (Disc 1).flac
Album 2/1-02. Song2 (Disc 1).flac
Album 2/2-01. Song1 (Disc 2).flac
Album 2/2-02. Song2 (Disc 2).flac
Album 3/001. Song 001.mp3
Album 3/002. Song 002.mp3
Album 3/003. Song 002.mp3
<...>
Album 3/100. Song 100.mp3
Album 3/101. Song 101.mp3

수천 개의 트랙으로 끝나는 노래 라이브러리에 대한 가장 효율적이고 효과적인 접근 방식은 무엇입니까?

답변1

사용 find? 예를 들어:

find . -type f -name '*.flac' -or -name '*.mp3'

또는 절대 경로를 사용하십시오.

find $PWD -type f -name '*.flac' -or -name '*.mp3'

대소문자를 구분하지 않음:

find $PWD -type f -iname '*.flac' -or -iname '*.mp3'

이러한 "m3u" 파일에서 목록을 추출하려면 다음 방법을 사용할 수 있습니다.

find . -name '*.m3u' -print0 |
while IFS= read -r -d '' plist; do
  len=$(wc -l < "$plist")
  dir=$(dirname "$plist")
  paste -d/ <(yes "$dir" | head -n$len) "$plist"
done

답변2

글쎄요, 저는 이 문제를 해결할 수 있었던 방법을 포스팅하는 것뿐입니다.

#!/bin/sh

for album in */; do
    while read -r track; do
        printf "%s%s\n" "$album" "$track"
    done < "${album}/playlist.m3u"
done > "main-playlist.m3u"

관련 정보