Dein Einzeiler erfordert vom Leser die Kenntnis der Syntax von find und Kenntnis der Shell-Befehle.
Ich wüsste nicht, welchen Shell-Befehl man hier kennen muss außer dem Pipe-Symbol, welches auch in der for-Schleife gebraucht wird. Und dass der Leser sich mit der Syntax von find befasst, sollte in einem Artikel über find ja wohl nichts außergewöhnliches sein.
Mein Befehl erfordert nur die Kenntnis der Shell-Befehle.
Die for-Befehl-Syntax hat so einige Tücken, die erst mal verstanden werden müssen (siehe z.B. voriger Beitrag und for-schleife-fuer-dateien-in-verzeichnis-ich-v).
Dein Einzeiler startet für jeden Fund einen Prozess (-exec), der einen weiteren Prozess startet (sh), der in Subshells die Programme mediainfo und grep startet. → 4 Prozesse für jeden Fund.
-exec ist kein weiterer Prozess, sondern wird innerhalb find ausgeführt. → 3 Prozesse für jeden Fund.
Mein Befehl läuft in der ohnehin schon laufenden Shell, die darin für jeden Schleifendurchlauf jeweils eine Subshell für die Programme mediainfo und grep startet. → 2 Prozesse für jede Datei. Ich gewinne.
Auch echo ist ein eigener Prozess. → 3 Prozesse für jede Datei.
Damit sind wir pari pari.
... Warum Du das Ergebnis per Pipe nochmal einließt und erneut ausgibst, verstehe ich nicht.
Um das vorangestellte "./" zu entfernen. Das ist eben der Trick, der mit find auf ein Glob erreicht wird, falls aus welchem Grund auch immer so eine Ausgabe gewünscht ist.
Richtig ist:
find *.mp3ist eine aufwendige Alternative zum simplen:
ls -1 *.mp3
Nur schade, dass ls weder -exec kennt, noch weitere Filter wie z.B. -size hinzugefügt werden können.