SD card / MP3 management tool

Hallo,

während ich auf alle bestellten Teile für meinen ersten TonUINO warte habe ich mir immer wieder die Frage gestellt: Wie macht ihr das eigentlich mit dem “Betanken” und dem Verwalten des Inhaltes Eurer SD-Karte(n)?

Vielleicht habe ich es bisher überlesen, aber die Vorstellung, Ordner und Dateien von Hand anzulegen und umzubenennen finde ich persönlich wenig praktikabel… :wink:

Deshalb habe ich die Wartezeit genutzt, um ein kleines Shell Script zu kreieren und hoffe, es findet Anwendung.

Bitte gebt gerne Feedback und/oder Verbesserungsvorschläge :+1:

Michi

#!/bin/bash
##############################################################################
#
# DESC: manage TonUINO sdcard
#
# INFO: https://www.voss.earth/tonuino/, Struktur auf der SD-Karte
#
# DEPS: depends on id3v2 tool/command
#
# VERS: v1.0 - 20190111 - Michi
#
##############################################################################

# check dependencies
[ ! -x id3v2 ] || { echo "ERROR: command \"id3v2\" is not not found, please install dependency!" >&2; exit 1; }

# print out help/usage
function usage {
  echo "Usage: $(basename "$0") [-h] || [-v] -l <path to sdcard> || [-v] [-n] -c <music folder> <path to sdcard>" >&2
  echo -e "\t-h|--help      show help/usage" >&2
  echo -e "\t-v|--verbose   show detailed information about executed commands" >&2
  echo -e "\t-l|--list      list content of sdcard based on ID3v2 tags" >&2
  echo -e "\t-c|--copy      copy content of music folder to sdcard, reflecting folder structure and naming convention" >&2
  echo -e "\t-n|--num       enumerate files mannually (e.g. in case of missing ID3v2 tags or mixed files" >&2
  exit 1
}

# copy content of music folder to sdcard, reflecting folder structure and naming convention
function copy {
  # validate source (directory, containing MP3 files) and destination (sdcard mount point)
  [ ! -d "$SRC" ] || [ -z "$(find "$SRC" -type f -iname \*.mp3 2>/dev/null)" ] && { echo "ERROR: please specify a valid path to your MP3 files!" >&2; exit 1; }
  [ ! -d "$DST" ] && { echo "ERROR: please specify a valid path to your sdcard!" >&2; exit 1; }

  # determine next "free" directory on sdcard and try to create it
  DN="$(printf "%02d" "$(find "$DST" -type d -name "[0-9][0-9]" 2>/dev/null | wc -l)")"
  mkdir "$DST"/"$DN" >/dev/null 2>&1 || { echo "ERROR: can't create directory $DST/$DN" >&2; exit 1; }

  # variable used for manual enumeration of files or files without ID3 tags
  CNT=1

  # loop over all MP3 files, convert filenames based on ID3 tag track number (if exists) or dedicated counter and copy to sdcard
  find "$SRC" -type f -iname \*.mp3 -print0 | while read -d $'\0' -r FILE ; do
    # try to get a valid track number and eliminate left hand zeros
    # https://stackoverflow.com/questions/8078167/bizarre-issue-with-printf-in-bash-script09-and-08-are-invalid-numbers-07/11804275
    FN="$(printf "%03d" "$(( 10#$(id3v2 -l "$FILE" | LC_ALL=C sed -ne '/TRCK/s/.*:[^0-9]*\([0-9]*\).*/\1/p') ))").mp3"
    # use dedicated counter for filenames if the above command didn't succeed or manual enumeration has been forced (-n)
    [[ $FN == "000.mp3" ]] || [[ -n $ENUM ]] && FN="$(printf "%03d" $CNT).mp3"
    # be verbose
    [[ -n $VERBOSE ]] && echo -n "cp $FILE $DST/$DN/$FN ... "
    # try to copy file
    cp "$FILE" "$DST"/"$DN"/"$FN" >/dev/null 2>&1 || { echo "ERROR: can't copy file $FILE to $DST/$DN/$FN" >&2; exit 1; }
    # be verbose
    [[ -n $VERBOSE ]] && echo "DONE"
    # increase dediacted counter
    ((CNT++))
  done

  exit 0
}

# copy content of music folder to sdcard, reflecting folder structure and naming convention
function list {
  # validate source (sdcard mount point, containing MP3 files)
  [ ! -d "$SRC" ] || [ -z "$(find "$SRC" -type f -iname \*.mp3 2>/dev/null)" ] && { echo "ERROR: please specify a valid path to your sdcard!" >&2; exit 1; }

  # loop over all sdcard folders
  for DIR in $(find "$SRC" -type d -name "[0-9][0-9]" | sort -n); do
    # in verbose mode print detailed information for each file (artists, album, title if ID3 tags are available)
    # or a summary per folder (artist, album if ID3 tags are available) otherwise
                if [[ -n $VERBOSE ]]; then
      # print directory name
                        echo "$DIR"
      # loop over MP3 files
                        for FILE in "$DIR"/*.mp3; do
                                echo -ne "\t$(basename "$FILE") => "
        # determine ID3 information and ensure output is ordered accordingly: artist, album, title
        # ordering: prepend a number per tag, sort nummerically, remove prefixed numbers
        # print it out finally
        id3v2 -l "$FILE" | LC_ALL=C sed -ne '/TPE1/s/.*: \(.*\)/1Artist: \1/p;/TALB/s/.*: \(.*\)/2, Album: \1/p;/TIT2/s/.*: \(.*\)/3, Title: \1/p;s/.*\(No ID3.* tag\)/3\1/p' | \
          LC_ALL=C sort -n | LC_ALL=C cut -c2- | LC_ALL=C tr -d '\n'
        # line break after each file
        echo
                        done
      # line break after each folder
                        echo
                else
      # initialize array for ID3 information
      ID3=()
      # determine ID3 information for all MP3 files in the directory at once and ensure output is ordered accordingly: artist, album
      # ordering: prepend a number per tag, sort nummerically, keep uniqe information only, remove prefixed numbers
      # store the result in an array
      while IFS=$'\n' read -r LINE; do
        ID3+=("$LINE")
      done < <(id3v2 -l "$DIR"/*.mp3 | LC_ALL=C sed -ne '/TPE1/s/.*: \(.*\)/1Artist: \1/p;/TALB/s/.*: \(.*\)/2Album: \1/p;s/.*\(No ID3.* tag\)/3\1/p' | \
        LC_ALL=C sort -n | LC_ALL=C uniq | LC_ALL=C cut -c2-)
      # if array holds exactly 2 elements, it has to be artist and album information, so print it out
      # if array holds more than 2 elements, the directory contains songs of various artists and/or albums
      # otherwise no ID3 tags were found
      if [[ ${#ID3[*]} -eq "2" ]]; then
                                echo "$DIR: ${ID3[0]}, ${ID3[1]}"
                        elif [[ ${#ID3[*]} -gt "2" ]]; then
                                echo "$DIR: various artists/albums"
                        else
                                echo "$DIR: no ID3 tags available"
                        fi
                fi
  done

  exit 0
}

# evaluate arguments provided on the command line
while [ "$#" -gt 0 ]; do
  case "$1" in
    -v|--verbose) VERBOSE=1;;
    -n|--num) ENUM=1;;
    -l|--list) CMD="list"; SRC="$2"; shift;;
    -c|--copy) CMD="copy"; SRC="$2"; DST="$3"; shift 2;;
    -h|*) usage;;
  esac
  shift
done

# MAIN - this is where the real work starts...
[[ $CMD == "list" ]] && list
[[ $CMD == "copy" ]] && copy

# print usage instruction if script has been called without any arguments
usage
4 „Gefällt mir“

Super Idee! Danke fürs teilen. Kannst du vielleicht noch etwas beschreiben was das Tool genau macht und wie man es anwendet? Beim überfliegen habe ich gelesen, daß IDv3 tags ausgewertet werden - sind diese zwingend Voraussetzung?

Wow, sieht super aus. Werd ich definitiv mal ausprobieren.
Bisher hat es bei mir gereicht die Ordner mit for zu durchlaufen und einen counter mitlaufen zu lassen. Bei find hatte ich z.T. Probleme mit der Reihenfolge der Dateien.

Es gab dieses Thema schonmal:

Oje, warum bin ich da nicht früher drauf gekommen… :thinking: Danke für den Hinweis!

Ich hoffe, der nachfolgende output bringt etwas Licht ins Dunkel… ID3 Tags sind nicht zwingend notwendig, aber durchaus sinnvoll. Das war auch einer der Gründe für die Entwicklung des Scriptes. Ich finde es gut, wenn ich später mal schnell/einfach sehe, was auf der Karte wo abgelegt ist. Mann/Frau könnte das Script im nächsten Schritt entsprechend erweitern, um alte Inhalte zu löschen/ersetzen und die Struktur dann zu reorganisieren.

Ohne ID3 Tags werden die Dateien auf Basis des Schleifenzählers durch nummeriert. Dies kann auch mit dem Parameter -n forciert werden, falls man einen Ordner mit gemischten Inhalten (mit und ohne Tags) hat. Denn sonst werden ggf. schon kopierte Dateien überschrieben, wenn deren Name aus einem vorhandenem Tag übernommen wurde und gerade zufällig dem Schleifenzähler gleicht der für eine Datei ohne Tag benutzt würde. Der Zähler selbst läuft stur hoch, während die vom find Kommando gelieferten Dateien in nicht sortierter Reihenfolge abgearbeitet werden. Eine Sortierung auf Basis von Dateinamen erschien mir an dieser Stelle nicht sinnvoll, da jeder Benutzer / jedes Programm die Namen beliebig vergeben kann.

Ist nicht optimal gelöst, zumindest wenn die Reihenfolge wichtig ist, z.B. bei Hörbüchern. Deshalb die klare Tendenz zu den ID3 Tags.

# Hilfe zum Script
$ tonuino-sdcard
Usage: tonuino-sdcard [-h] || [-v] -l <path to sdcard> || [-v] [-n] -c <music folder> <path to sdcard>
	-h|--help      show help/usage
	-v|--verbose   show detailed information about executed commands
	-l|--list      list content of sdcard based on ID3v2 tags
	-c|--copy      copy content of music folder to sdcard, reflecting folder structure and naming convention
	-n|--num       enumerate files mannually (e.g. in case of missing ID3v2 tags or mixed files

# Dateien aus Music/tmp, ... auf die SD-Karte übertragen, -v ist etwas geschwätziger
$ tonuino-sdcard -c Music/tmp /tmp/sdcard
$ tonuino-sdcard -c Music/Die\ Fantastischen\ Vier/Captain\ Fantastic /tmp/sdcard
$ tonuino-sdcard -c Music/Judith\ Holofernes/Ein\ leichtes\ Schwert /tmp/sdcard -v
cp Music/Judith Holofernes/Ein leichtes Schwert/Judith_Holofernes_-_Ein_leichtes_Schwert_-_12_-_John_Irving.mp3 /tmp/sdcard/02/012.mp3 ... DONE
cp Music/Judith Holofernes/Ein leichtes Schwert/Judith_Holofernes_-_Ein_leichtes_Schwert_-_09_-_Hasenherz_.mp3 /tmp/sdcard/02/009.mp3 ... DONE
cp Music/Judith Holofernes/Ein leichtes Schwert/Judith_Holofernes_-_Ein_leichtes_Schwert_-_06_-_Opossum.mp3 /tmp/sdcard/02/006.mp3 ... DONE
cp Music/Judith Holofernes/Ein leichtes Schwert/Judith_Holofernes_-_Ein_leichtes_Schwert_-_11_-_Havarie.mp3 /tmp/sdcard/02/011.mp3 ... DONE
cp Music/Judith Holofernes/Ein leichtes Schwert/Judith_Holofernes_-_Ein_leichtes_Schwert_-_07_-_M.I.L.F.mp3 /tmp/sdcard/02/007.mp3 ... DONE
cp Music/Judith Holofernes/Ein leichtes Schwert/Judith_Holofernes_-_Ein_leichtes_Schwert_-_02_-_Pechmarie.mp3 /tmp/sdcard/02/002.mp3 ... DONE
cp Music/Judith Holofernes/Ein leichtes Schwert/Judith_Holofernes_-_Ein_leichtes_Schwert_-_10_-_Platz_da.mp3 /tmp/sdcard/02/010.mp3 ... DONE
cp Music/Judith Holofernes/Ein leichtes Schwert/Judith_Holofernes_-_Ein_leichtes_Schwert_-_05_-_Liebe_Teil_2_-_Jetzt_erst_recht_.mp3 /tmp/sdcard/02/005.mp3 ... DONE
cp Music/Judith Holofernes/Ein leichtes Schwert/Judith_Holofernes_-_Ein_leichtes_Schwert_-_03_-_Ein_leichtes_Schwert__.mp3 /tmp/sdcard/02/003.mp3 ... DONE
cp Music/Judith Holofernes/Ein leichtes Schwert/Judith_Holofernes_-_Ein_leichtes_Schwert_-_04_-_Danke,_ich_hab_schon.mp3 /tmp/sdcard/02/004.mp3 ... DONE
cp Music/Judith Holofernes/Ein leichtes Schwert/Judith_Holofernes_-_Ein_leichtes_Schwert_-_01_-_Nichtsnutz.mp3 /tmp/sdcard/02/001.mp3 ... DONE
cp Music/Judith Holofernes/Ein leichtes Schwert/Judith_Holofernes_-_Ein_leichtes_Schwert_-_08_-_Brennende_Brücken.mp3 /tmp/sdcard/02/008.mp3 ... DONE

# Struktur auf der Karte nach obigen Aktionen
$ find /tmp/sdcard
/tmp/sdcard
/tmp/sdcard/02
/tmp/sdcard/02/008.mp3
/tmp/sdcard/02/009.mp3
/tmp/sdcard/02/001.mp3
/tmp/sdcard/02/002.mp3
/tmp/sdcard/02/003.mp3
/tmp/sdcard/02/007.mp3
/tmp/sdcard/02/012.mp3
/tmp/sdcard/02/006.mp3
/tmp/sdcard/02/010.mp3
/tmp/sdcard/02/004.mp3
/tmp/sdcard/02/005.mp3
/tmp/sdcard/02/011.mp3
/tmp/sdcard/00
/tmp/sdcard/00/001.mp3
/tmp/sdcard/00/002.mp3
/tmp/sdcard/00/003.mp3
/tmp/sdcard/00/004.mp3
/tmp/sdcard/00/005.mp3
/tmp/sdcard/01
/tmp/sdcard/01/008.mp3
/tmp/sdcard/01/009.mp3
/tmp/sdcard/01/015.mp3
/tmp/sdcard/01/001.mp3
/tmp/sdcard/01/014.mp3
/tmp/sdcard/01/002.mp3
/tmp/sdcard/01/016.mp3
/tmp/sdcard/01/003.mp3
/tmp/sdcard/01/007.mp3
/tmp/sdcard/01/013.mp3
/tmp/sdcard/01/012.mp3
/tmp/sdcard/01/006.mp3
/tmp/sdcard/01/010.mp3
/tmp/sdcard/01/004.mp3
/tmp/sdcard/01/005.mp3
/tmp/sdcard/01/011.mp3

# Zusammenfassung des Karteninhaltes unter Verwendung von ID3 tags auflisten (falls verfügbar)
$ tonuino-sdcard -l /tmp/sdcard
/tmp/sdcard/00: various artists/albums
/tmp/sdcard/01: various artists/albums
/tmp/sdcard/02: Artist: Judith Holofernes, Album: Ein leichtes Schwert

# Details zum Karteninhalt unter Verwendung von ID3 tags auflisten (falls verfügbar)
$ tonuino-sdcard -l /tmp/sdcard -v
/tmp/sdcard/00
	001.mp3 => No ID3 tag
	002.mp3 => No ID3 tag
	003.mp3 => Artist: Ennio Morricone, Album: Il Etait une Fois dans L'Ouest, Title: The Man with the Harmonica
	004.mp3 => No ID3 tag
	005.mp3 => No ID3 tag

/tmp/sdcard/01
	001.mp3 => Artist: Die Fantastischen Vier, Album: Captain Fantastic, Title: Captain Fantastic
	002.mp3 => Artist: Die Fantastischen Vier, Album: Captain Fantastic, Title: Tunnel
	003.mp3 => Artist: Die Fantastischen Vier feat. Clueso, Album: Captain Fantastic, Title: Zusammen
	004.mp3 => Artist: Die Fantastischen Vier, Album: Captain Fantastic, Title: Fantanamera
	005.mp3 => Artist: Die Fantastischen Vier, Album: Captain Fantastic, Title: Moduland.Y
	006.mp3 => Artist: Die Fantastischen Vier, Album: Captain Fantastic, Title: Hitisn
	007.mp3 => Artist: Die Fantastischen Vier, Album: Captain Fantastic, Title: Watchmen
	008.mp3 => Artist: Die Fantastischen Vier, Album: Captain Fantastic, Title: Alle (Skit)
	009.mp3 => Artist: Die Fantastischen Vier, Album: Captain Fantastic, Title: Endzeitstimmung
	010.mp3 => Artist: Die Fantastischen Vier feat. Flo Mega, Album: Captain Fantastic, Title: Hot
	011.mp3 => Artist: Die Fantastischen Vier, Album: Captain Fantastic, Title: Henson J.J. Barkley (Skit)
	012.mp3 => Artist: Die Fantastischen Vier, Album: Captain Fantastic, Title: Aller Anfang ist Yeah
	013.mp3 => Artist: Die Fantastischen Vier, Album: Captain Fantastic, Title: Das ist mein Ding
	014.mp3 => Artist: Die Fantastischen Vier, Album: Captain Fantastic, Title: Affen mit Waffen
	015.mp3 => Artist: Die Fantastischen Vier feat. Tom Gaebel, Album: Captain Fantastic, Title: Hitisn Reprise
	016.mp3 => Artist: Die Fantastischen Vier feat. Damion, Album: Captain Fantastic, Title: Weitermachen

/tmp/sdcard/02
	001.mp3 => Artist: Judith Holofernes, Album: Ein leichtes Schwert, Title: Nichtsnutz
	002.mp3 => Artist: Judith Holofernes, Album: Ein leichtes Schwert, Title: Pechmarie
	003.mp3 => Artist: Judith Holofernes, Album: Ein leichtes Schwert, Title: Ein leichtes Schwert
	004.mp3 => Artist: Judith Holofernes, Album: Ein leichtes Schwert, Title: Danke, ich hab schon
	005.mp3 => Artist: Judith Holofernes, Album: Ein leichtes Schwert, Title: Liebe Teil 2 - Jetzt erst recht
	006.mp3 => Artist: Judith Holofernes, Album: Ein leichtes Schwert, Title: Opossum
	007.mp3 => Artist: Judith Holofernes, Album: Ein leichtes Schwert, Title: M.I.L.F
	008.mp3 => Artist: Judith Holofernes, Album: Ein leichtes Schwert, Title: Brennende Br�cken
	009.mp3 => Artist: Judith Holofernes, Album: Ein leichtes Schwert, Title: Hasenherz
	010.mp3 => Artist: Judith Holofernes, Album: Ein leichtes Schwert, Title: Platz da
	011.mp3 => Artist: Judith Holofernes, Album: Ein leichtes Schwert, Title: Havarie
	012.mp3 => Artist: Judith Holofernes, Album: Ein leichtes Schwert, Title: John Irving

Am besten würde man mal 'ne GUI bauen um die SD-Karte zu verwalten :wink:

Aber das Script ist schon echt super und sinnvoll.

2 „Gefällt mir“

Hallo Zusammen,

ich habe gleichzeitig ein ähnliches Script entwickelt (hab @Michi 's Skript nicht gesehen). Allerdings in Python. Das ist hier zu finden:

Es verwendet allerdings (noch) keine ID3-Tags.

2 „Gefällt mir“

Mittlerweile sind die wichtigsten Teile angekommen und mein erster TonUINO läuft auf dem Steckbrett… :+1:

Deshalb mal ein Update zum Script (jetzt auch auf GitHub):

1 „Gefällt mir“

In die Reihe der MP3-Tagging/Renaming Tools würde ich gerne EasyTag mit einreihen. Damit lassen sich Massenumbenennungen im Handumdrehen durchführen. Gibts für Windows als Installer, unter den Debian-Derivaten wie Ubuntu reicht ein sudo apt-get install easytag für die Installation.

bYe Martin

1 „Gefällt mir“

Hallo @Michi, vielen Dank für dein Skript, ich nutze es unter Mac OS. Leider habe ich ein Problem die ID3 Tags anzuzeigen und keine mich mit dem ganzen zu wenig aus. Es scheint mir, dass meine mp3s nur Tags mit ID3v2 haben nicht ID3v1? …kann ich irgendwie auch mit v2 arbeiten? Denke es liegt irgendwo im Bereich der Zeilen 126 ff, allerdings bin ich nicht so fit mit ‚sed‘ etc.

Hier ein paar Infos:

 ./tonuino-sdcard.sh -l data/TONUINO-F/04/ -v
data/TONUINO-F/04/
	001.mp3 => No ID3v1 tag
	002.mp3 => No ID3v1 tag
	003.mp3 => No ID3v1 tag
	004.mp3 => No ID3v1 tag
	005.mp3 => No ID3v1 tag
	006.mp3 => No ID3v1 tag
	007.mp3 => No ID3v1 tag
	008.mp3 => No ID3v1 tag
	009.mp3 => No ID3v1 tag
	010.mp3 => No ID3v1 tag
	011.mp3 => No ID3v1 tag
	012.mp3 => No ID3v1 tag

Meine Version:

id3v2 --version
id3v2 0.1.12
Uses id3lib-3.8.3

This program adds/modifies/removes/views id3v2 tags, 
and can convert from id3v1 tags

Direkter Output von id3v2:

id3v2 -l data/TONUINO-F/04/001.mp3 
id3v2 tag info for data/TONUINO-F/04/001.mp3:
TT2 (Title/songname/content description): Schokolade
TP1 (Lead performer(s)/Soloist(s)): Deine Freunde
TP2 (Band/orchestra/accompaniment): Deine Freunde
TCM (Composer): Florian Sump, Lukas Nimscheck & Markus Pauli
TAL (Album/Movie/Show title): Ausm H?uschen
TRK (Track number/Position in set): 1/12
TYE (Year): 2012
TCO (Content type): Children's (255)
COM (Comments): (iTunPGAP)[eng]: 0
TEN (Encoded by): Musik 12.10.1.37
COM (Comments): (iTunNORM)[eng]:  000011A9 0000130B 000082F8 000089DE 0001ED78 0002015E 000085F0 000085B9 00011868 0000FFD0
COM (Comments): (iTunSMPB)[eng]:  00000000 00000210 00000B1C 0000000000791454 00000000 0036DEF0 00000000 00000000 00000000 00000000 00000000 00000000
PIC (Attached picture): ()[JPG, 0]: , 115106 bytes
data/TONUINO-F/04/001.mp3: No ID3v1 tag

Würde mich über einen Hinweis freuen.

Servus @mzeecedric! Ich benutze das selbst auch unter macOS und mir ist kürzlich beim auflisten aufgefallen, dass da irgendwas faul ist. Leider hab’ ich das noch nicht weiter verfolgt. Aber Du hast schon mal Recht, die sed patterns matchen nicht (matche derzeit 4-stellige, dein Beispiel und mein Test auf die Schnelle zeigen aber 3-stellige pattern). Ich schau mal, ob ich mir das morgen vornehmen kann. Bin mir nicht sicher, ob das an den ID3-Tag Versionen oder dem id3v2 tool liegt. Würde das dann mal flicken und upstream bringen. Grüße, @Michi

1 „Gefällt mir“

@mzeecedric es ist vollbracht - git pull :wink: bitte testen und gerne noch Feedback, falls was nicht funktioniert und/oder zu verbessern ist…

1 „Gefällt mir“

@mzeecedric hab die add Funktion auch noch nachgebessert, gestern wohl übersehen…

1 „Gefällt mir“

ähm, war was mit der add Funktion…? Danke. Werd die Tage nochmal testen. Wundere mich nur gerade, was eigentlich mit meinen Umlauten futsch ist, „Ausm H?uschen“. Naja, kommt jedenfalls direkt so aus id3v2 raus…

die angezeigt baumstruktur der speicherkarte kann man, finde ich, noch schön erweitern. so sieht es aus wie bei jedem anderen auch und enthält wenig zusätzliche information als zusammenfassung. es wäre doch viel informativer, würde man die struktur noch mit id3-tag informationen oder den ursprünglichen namen anzeigen. aber du wirst das sicher einfach mit tree oder so machen…

1 „Gefällt mir“

@quotschmacher verstehe ich nicht ganz… :frowning: hast Du Dir mal die Readme im repo angeschaut? erhelle mich gerne noch mal :wink:

@mzeecedric So, ich hab noch mal eine „Verbesserung“ vorgenommen, die mir persönlich schon länger unter den Nägeln brennt. Jetzt gibt es im folder summary listing -l ohne -v IMHO bessere Ergebnisse. Das mag subjektiv sein :wink: aber ich habe einige Ordner, bei denen zwar komplette Alben drin sind, aber bei einzelnen files die artist/album Infos manchmal leicht verschieden sind (kommt vermutlich durch „schlechte“ Daten bei freedb.org, etc. beim Rippen). So bekomme ich jetzt in 99.9% der Fälle wenigsten eine der beiden Information *g*

ich bezog mich auf das hier:

show sdcard content nicely (using system tool)

aber steht ja auch da - system tool. dachte, das wäre aus deinem script. mein vorschlag bleibt aber trotzdem: vielleicht so eine ausgabe wie die von tree, nur mit zusatzinformationen (welcher ordner war das ursprünglich mal, wie heißt das lied, das sich hinter 001.mp3 verbirgt. einfach, das man eine überischt hat.
oder wenigstens ein „tree“, welches die id3-tags ausliest und dann einfach nur die entsprechenden titel anzeigt (eben in der baumstruktur)

Dafür hatte ich eigentlich den „verbose“ switch beim listing vorgesehen: -l -v. Mit nur einer Verzeichnisebene gibt es auf der Karte ja keine wirkliche Baumstruktur, das ist ja sowas von Bonsai

$ tonuino-sdcard -l /Volumes/TONUINO
/Volumes/TONUINO/01: Artist: Reinhard Lakomy & Monika Ehrhardt, Album: Der Traumzauberbaum
/Volumes/TONUINO/02: Artist: Die Toten Hosen, Album: Alles ohne Strom
/Volumes/TONUINO/03: Artist: unknown, Album: unknown

vs.

$ tonuino-sdcard -l /Volumes/TONUINO -v
/Volumes/TONUINO/01
	001.mp3 => Artist: Reinhard Lakomy & Monika Ehrhardt, Album: Der Traumzauberbaum, Title: Traumzauberbaum
	002.mp3 => Artist: Reinhard Lakomy & Monika Ehrhardt, Album: Der Traumzauberbaum, Title: Küsschenlied
	003.mp3 => Artist: Reinhard Lakomy & Monika Ehrhardt, Album: Der Traumzauberbaum, Title: Der Pfannkuchenschreck
	004.mp3 => Artist: Reinhard Lakomy & Monika Ehrhardt, Album: Der Traumzauberbaum, Title: Der Eierbecher
	005.mp3 => Artist: Reinhard Lakomy & Monika Ehrhardt, Album: Der Traumzauberbaum, Title: Gespensterduett
	006.mp3 => Artist: Reinhard Lakomy & Monika Ehrhardt, Album: Der Traumzauberbaum, Title: Liebkoselied
	007.mp3 => Artist: Reinhard Lakomy & Monika Ehrhardt, Album: Der Traumzauberbaum, Title: Mary Lu
	008.mp3 => Artist: Reinhard Lakomy & Monika Ehrhardt, Album: Der Traumzauberbaum, Title: Frühlingslied
	009.mp3 => Artist: Reinhard Lakomy & Monika Ehrhardt, Album: Der Traumzauberbaum, Title: Ich Bin Doch Kein Schneemann
	010.mp3 => Artist: Reinhard Lakomy & Monika Ehrhardt, Album: Der Traumzauberbaum, Title: Frosch-Rock'n'Roll
	011.mp3 => Artist: Reinhard Lakomy & Monika Ehrhardt, Album: Der Traumzauberbaum, Title: Kleine Wolke
	012.mp3 => Artist: Reinhard Lakomy & Monika Ehrhardt, Album: Der Traumzauberbaum, Title: Lied Von Der Anstrengung, Böse Zu Sein
	013.mp3 => Artist: Reinhard Lakomy & Monika Ehrhardt, Album: Der Traumzauberbaum, Title: Neidlied
	014.mp3 => Artist: Reinhard Lakomy & Monika Ehrhardt, Album: Der Traumzauberbaum, Title: Regenlied
	015.mp3 => Artist: Reinhard Lakomy & Monika Ehrhardt, Album: Der Traumzauberbaum, Title: Wie Riesen Niesen
	016.mp3 => Artist: Reinhard Lakomy & Monika Ehrhardt, Album: Der Traumzauberbaum, Title: Klopsemops
	017.mp3 => Artist: Reinhard Lakomy & Monika Ehrhardt, Album: Der Traumzauberbaum, Title: Das Bächlein
	018.mp3 => Artist: Reinhard Lakomy & Monika Ehrhardt, Album: Der Traumzauberbaum, Title: Mondsilbertaufe
	019.mp3 => Artist: Reinhard Lakomy & Monika Ehrhardt, Album: Der Traumzauberbaum, Title: Eine Kleine Stadt
	020.mp3 => Artist: Reinhard Lakomy & Monika Ehrhardt, Album: Der Traumzauberbaum, Title: Traumreise

/Volumes/TONUINO/02
	001.mp3 => Artist: Die Toten Hosen, Album: Alles ohne Strom, Title: Entschuldigung, es tut uns leid!
	002.mp3 => Artist: Die Toten Hosen, Album: Alles ohne Strom, Title: Strom
	003.mp3 => Artist: Die Toten Hosen, Album: Alles ohne Strom, Title: Urknall
	004.mp3 => Artist: Die Toten Hosen, Album: Alles ohne Strom, Title: Laune der Natur
	005.mp3 => Artist: Die Toten Hosen, Album: Alles ohne Strom, Title: Das ist der Moment
	006.mp3 => Artist: Die Toten Hosen, Album: Alles ohne Strom, Title: Kamikaze
	007.mp3 => Artist: Die Toten Hosen, Album: Alles ohne Strom, Title: Ein guter Tag zum Fliegen
	008.mp3 => Artist: Die Toten Hosen, Album: Alles ohne Strom, Title: Ohne Dich
	009.mp3 => Artist: Die Toten Hosen, Album: Alles ohne Strom, Title: Schwere (-los)
	010.mp3 => Artist: Die Toten Hosen, Album: Alles ohne Strom, Title: Altes Fieber
	011.mp3 => Artist: Die Toten Hosen, Album: Alles ohne Strom, Title: Politische Lieder
	012.mp3 => Artist: Die Toten Hosen, Album: Alles ohne Strom, Title: 1000 gute Gründe
	013.mp3 => Artist: Die Toten Hosen, Album: Alles ohne Strom, Title: Everlong
	014.mp3 => Artist: Die Toten Hosen, Album: Alles ohne Strom, Title: Alles mit nach Hause
	015.mp3 => Artist: Die Toten Hosen, Album: Alles ohne Strom, Title: Paradies
	016.mp3 => Artist: Die Toten Hosen, Album: Alles ohne Strom, Title: Sorgenbrecher (Auf Euch)
	017.mp3 => Artist: Die Toten Hosen, Album: Alles ohne Strom, Title: Achterbahn
	018.mp3 => Artist: Die Toten Hosen, Album: Alles ohne Strom, Title: Liebeslied
	019.mp3 => Artist: Die Toten Hosen, Album: Alles ohne Strom, Title: Feiern im Regen
	020.mp3 => Artist: Die Toten Hosen, Album: Alles ohne Strom, Title: Hier kommt Alex
	021.mp3 => Artist: Die Toten Hosen, Album: Alles ohne Strom, Title: Tage wie diese

/Volumes/TONUINO/03
	001.mp3 => No ID3 tag
	002.mp3 => No ID3 tag
	003.mp3 => No ID3 tag
	004.mp3 => No ID3 tag
2 „Gefällt mir“