4 votos

¿Hay alguna manera de proporcionar un orden de clasificación a una consulta mdfind?

Al tratar de obtener una lista de todos los archivos de música de un álbum en particular utilizando mdfind veo que los archivos no se devuelven necesariamente en cualquier orden. Preferiría el orden álbum/pista si es posible, pero no encuentro la forma de proporcionar el orden de clasificación en la línea de comandos. La invocación actual es algo así:

mdfind -onlyin "$MUSICROOT" -literal "$MDQUERY"

donde:

$MUSICROOT is ~/Music/iTunes
$MDQUERY is "kMDItemContentTypeTree == 'public.audio' && kMDItemAlbum == '*$1*'c"

Lo ideal sería añadir algo como lo siguiente a la consulta:

ORDER BY kMDItemAlbum, kMDItemAudioTrackNumber

4voto

Andrey Losev Puntos 197

Utilicé la siguiente función del shell para proporcionar la ordenación:

function sort_file()
{
    TMPFILE=`mktemp /tmp/sortable.XXXXXX` || exit 1
    export MDLS="mdls -raw -name kMDItemAlbum -name kMDItemAudioTrackNumber"
    export TR="tr \"\0\" \"\;\""
    awk '{system( "$MDLS \"" $0 "\" | $TR" ); print "\;"$0; }' $1 > $TMPFILE
    sort -t\; -k 2n -k 1f $TMPFILE | awk -F";" '{ print $3; }' > $1
}

NOTA DEL META: Hubiera puesto esto en un comentario en la respuesta anterior, pero no pude conseguir que tuviera el formato correcto.

0voto

A riesgo de decir lo que es obvio, "clasificar".

Por ejemplo, mdfind -onlyin "$MUSICROOT" -literal "$MDQUERY" | sort

ordenará la salida alfabéticamente, dándole Artista, Título, Pista. (no hará el genial truco de iTunes de ignorar 'El').

El comando de ordenación tiene muchas opciones, incluyendo la ordenación en campos concretos si quieres tener más control.

Edición: La siguiente función del shell script proporcionará la ordenación deseada en el caso específico mencionado:

function sort_file()
{
    TMPFILE=`mktemp /tmp/sortable.XXXXXX` || exit 1
    export MDLS="mdls -raw -name kMDItemAlbum -name kMDItemAudioTrackNumber"
    export TR="tr \"\0\" \"\;\""
    awk '{system( "$MDLS \"" $0 "\" | $TR" ); print "\;"$0; }' $1 > $TMPFILE
    sort -t\; -k 2n -k 1f $TMPFILE | awk -F";" '{ print $3; }' > $1
}

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X