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

4

Al intentar obtener una lista de todos los archivos de música de un álbum en particular usando mdfind, veo que los archivos no se devuelven necesariamente en ningún orden. Preferiría el orden del álbum / pista si es posible, pero no puedo encontrar una manera de proporcionar el orden de clasificación en la línea de comandos. La invocación actual es algo así como:

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

donde:

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

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

ORDER BY kMDItemAlbum, kMDItemAudioTrackNumber
    
pregunta jmhindle 23.08.2011 - 19:38

2 respuestas

0

A riesgo de indicar lo obvio, 'ordenar'.

por ejemplo mdfind -onlyin "$ MUSICROOT" -literal "$ MDQUERY" | ordenar

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

El comando de ordenación tiene muchas opciones, incluida la clasificación en campos particulares si desea más control.

Editar: La siguiente función de script de shell proporcionará la clasificació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 \"
function sort_file()
{
    TMPFILE='mktemp /tmp/sortable.XXXXXX' || exit 1
    export MDLS="mdls -raw -name kMDItemAlbum -name kMDItemAudioTrackNumber"
    export TR="tr \"%pre%\" \"\;\""
    awk '{system( "$MDLS \"" $0 "\" | $TR" ); print "\;"$0; }' $1 > $TMPFILE
    sort -t\; -k 2n -k 1f $TMPFILE | awk -F";" '{ print $3; }' > $1
}
\" \"\;\"" awk '{system( "$MDLS \"" $0 "\" | $TR" ); print "\;"$0; }' $1 > $TMPFILE sort -t\; -k 2n -k 1f $TMPFILE | awk -F";" '{ print $3; }' > $1 }
    
respondido por el zzz 23.08.2011 - 21:06
4

Usé la siguiente función de shell para proporcionar la clasificación:

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

NOTA META: hubiera puesto esto en un comentario en la respuesta anterior, pero no pude hacer que se formatee correctamente.

    
respondido por el jmhindle 24.08.2011 - 19:25

Lea otras preguntas en las etiquetas