Bir mdfind sorgusuna sıralama düzeni sağlamanın bir yolu var mı?


4

Mdfind kullanarak belirli bir albümdeki tüm müzik dosyalarının bir listesini almaya çalışırken, dosyaların mutlaka herhangi bir sırayla döndürülmediğini görüyorum. Mümkünse albüm / parça sıralamasını tercih ederdim, ancak komut satırında sıralama düzenini sağlayacak bir yol bulamıyorum. Mevcut çağrı şunun gibi bir şeydir:

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

nerede:

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

İdeal olarak, sorguya aşağıdaki gibi bir şey eklemek isterdim:

ORDER BY kMDItemAlbum, kMDItemAudioTrackNumber

Yanıtlar:


0

Açık, 'sıralama' belirleme riski.

örneğin mdfind -onlyin "$ MUSICROOT" -literal "$ MDQUERY" | çeşit

çıktıyı alfabetik olarak sıralar, size Sanatçı, Unvan, Parça verir. ('iTunes'u görmezden gelme harikası iTunes hile yapmaz).

Sort komutunun, daha fazla kontrol istiyorsanız, belirli alanlara göre sıralama da dahil olmak üzere birçok seçeneği vardır.

Düzenleme: Aşağıdaki kabuk betiği işlevi belirtilen durumda istenen sıralama sağlar:

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
}

Sıralama için çıktıyı pipolama ile ilgili sorun mdfind'in dosya adlarını çıktığı ve dosyalarla ilişkili meta veriyi sıralamak istediğimdir. sort benim yedekleme çözümüm olacaktı, çünkü her sonuç borusu için bir dosyaya bir mdls yapmamı, sonra da bu alanlardaki dosyayı sıralamamı ve dosya adını çıkarmamı gerektirecekti.
jmhindle

Üzgünüm, verdiğiniz örneklerden geçiyordum ve dosya adlarının eşdeğerlerinin yeterli olacağını düşündüm.
zzz

Dün gece mdfind, mdls, awk ve diğer bazı Unix araçları ile oynadım ama düzgün ve tutarlı bir şekilde çalışamadım (temelde mdfind / mdls çıktısı parseabilite açısından kolay değil) :-(
nohillside

Sıralama çözümüne gidiyorum çünkü mdfind'in bir sıralama yapabileceğini sanmıyorum. Spotlight API'sini kullandıysam, bir sıralama geri çağrısı sağlayabilirim ancak yine de ilk önce sıralanmamış veri listesini oluşturur.
jmhindle

mdfind -0, belki de ayrıştırmaya yardımcı olabilecek boş ayrılmış dosya adlarını yazabilmelidir .
SilverWolf

4

Sıralama sağlamak için aşağıdaki kabuk işlevini kullandım:

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
}

META NOT: Bunu yukarıdaki cevaba bir yorumda verirdim, ancak doğru şekilde formatlayamadım.


Bu harika betiği eklemek için önceki cevabı düzenleyebileceğinize inanıyorum - bir başkası incelendikten sonra onaylanacak. Güzel gelişme - bir yorum için çok fazla!
bmike
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.