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

おすすめ記事