저는 다음과 같은 음악 컬렉션을 보관하고 있습니다.
음악/앨범 [FLAC] 음악/앨범 [MP3]
다음과 같이 m3u 재생 목록을 만듭니다(음악 디렉토리에서 실행).
find "albums [FLAC]" "albums [MP3]" -type f \( -iname "*.mp3" -o -iname "*.flac" \) -print | sed 's/^\.\///g' | sort >> "$out_file"
하지만 다음과 같은 상황이 여러 개 있습니다.
Music/albums [MP3]/Artist A/album title/track.ext
Music/albums [MP3]/Artist B/album title/track.ext
Music/albums [FLAC]/Artist A/album title/track.ext
Music/albums [FLAC]/Artist B/album title/track.ext
특정 아티스트의 모든 앨범은 재생 목록에서 함께 그룹화되지 않으며 정렬로 인해 대신 목록의 상단 또는 하단에 표시됩니다.
나는 그들을 통합 마운트하기 위해 overlayfs를 사용하는 실험을 했습니다. 이것은 작동하지만 m3u가 다음과 같도록 정렬하는 방법을 찾고 있습니다.
Music/albums [MP3]/Artist A/album title/track.ext
Music/albums [FLAC]/Artist A/album title/track.ext
Music/albums [MP3]/Artist B/album title/track.ext
Music/albums [FLAC]/Artist B/album title/track.ext
나는 sort가 이것을 할 수 있어야 한다고 생각합니다. 아니면 Python에서 할 수도 있지만 올바른 방향으로 조금만 움직여 주시면 감사하겠습니다!
답변1
귀하의 파이프라인에 있습니다 sort
. 필요한 것이 무엇인지 알려주세요:
sort -t / -k 3,3 -k 2r,2 -k 4
어디
-t /
구분 기호를 지정합니다.-k 3,3
세 번째 필드에 따라 정렬하라고 지시합니다.- 세 번째 필드가 동일한 항목의 경우
-k 2r,2
두 번째 필드에 따라 역 정렬하도록 지시합니다. - 이것이 충분하지 않은 경우
-k 4
네 번째 필드와 그 이후의 모든 항목을 고려하라고 지시합니다.
이 특정 명령은 첫 번째 필드에 따라 전혀 정렬되지 않습니다. 귀하의 예에서 첫 번째 필드는 고정된 것처럼 보입니다 Music
.
MP3인지 FLAC인지 상관하지 않는다면 두 번째 필드도 무시할 수 있습니다. 그러한 경우 정렬은 세 번째 필드와 그 이후의 모든 항목에 따라 수행되어야 합니다. 이에 대한 명령은 훨씬 간단합니다.
sort -t / -k 3
자세한 내용은 다음을 참조하세요.이 질문그리고 man 1 sort
.