AppleScript per trovare i file in base alla corrispondenza esatta del nome da una variabile Automator

4

Ho un flusso di lavoro che ottiene il nome della traccia di una singola traccia nel mio lettore mp3 e lo memorizza in una variabile. Io quindi uso questo nell'azione Spotlight per trovare quella traccia nella mia libreria di iTunes, ma l'azione Spotlight dà più risultati quando voglio solo la traccia esatta non tutte le tracce che contengono il nome.

Ho bisogno di un modo o di uno script per sostituire questa azione. Tutte le ricerche forniscono comandi Terminal che non capisco o come utilizzare con Automator.

Eccounapplescriptchehotrovatofunzionamaèveramentelento,batteilFindersuogniloop,c'èunmodopervelocizzarlo,lamialibreriahaoltre10.000tracce?Grazie link

    
posta user2033505 14.07.2018 - 22:40
fonte

1 risposta

0

Non ho Snow Leopard , quindi sono limitato a ciò che posso testare come valido per il tuo sistema. Pertanto, tieni presente che la seguente soluzione è stata ideata e testata utilizzando quanto segue:

Informazioni di sistema: Versione AppleScript : "2.7", versione di sistema : "10.13.5"

Detto ciò, vedo ora che questo non dovrebbe funzionare su El Capitan . potrebbe lavorare su Snow Leopard , ma sono meno sicuro.

La mia soluzione proposta è quella di sostituire l'azione Spotlight Automator con un'azione Run AppleScript :

IlcodicecontenutoinRunAppleScriptèilseguente:

useframework"Foundation"

    property ca : a reference to current application


    on run {input, parameters}
        set MusicFolder to "/Volumes/Media/Music/iTunes/iTunes Music/Music/"

        set FileManager to ca's NSFileManager's defaultManager()
        set MusicFiles to (FileManager's subpathsAtPath:MusicFolder)'s ¬
            pathsMatchingExtensions:{"mp3", "m4a"}
        set [filename] to input
        set format to "SELF endswith " & ("/" & filename & ".mp3")'s quoted form & ¬
            " OR SELF endswith " & ("/" & filename & ".m4a")'s quoted form
        set filter to ca's NSPredicate's predicateWithFormat:format

        set matches to {}

        repeat with match in (MusicFiles's filteredArrayUsingPredicate:filter) #'
            set end of matches to POSIX file (MusicFolder & match as text) as alias
        end repeat

        return matches
    end run

Ciò restituirà le tracce con il nome esatto fornito dalla variabile trackName nel flusso di lavoro. Pertanto, se avessi impostato trackName nella mia esecuzione di prova su "Everywhere I Go" (cioè senza il precedente "04" ), la ricerca avrebbe restituito un risultato vuoto.

Inoltre, tieni presente che potresti avere alcune tracce che hanno nomi di file identici da diverse cartelle / album. Se ci sono due file in cartelle diverse entrambi chiamati "01 Song.mp3" , entrambi i file verranno restituiti nella ricerca.

    
risposta data 19.07.2018 - 22:44
fonte

Leggi altre domande sui tag