Le cartelle dinamiche vere (NON una "Smart Folder" SavedSearch) sono possibili?

1

Sto usando un'applicazione che carica il contenuto di una cartella di campioni audio per il mio uso. Gli esempi che voglio usare, tuttavia, sono sparsi tra molte cartelle sulla mia macchina, e non voglio copiarli tutti in una singola cartella.

Gli alias funzionano perfettamente e sono riuscito a creare collegamenti simbolici a tutti i file desiderati, a inserirli in una singola cartella e a caricarli. Ottima soluzione, ad eccezione di una cosa.

Aggiungerò più file nel tempo che soddisfano i criteri che utilizzo per questa applicazione. Mi piacerebbe essere in grado di utilizzare una cartella dinamica che sarebbe essenzialmente ciò che sono "Smart Folders", ad eccezione di una cartella reale. Una "cartella Smart" per Mac non è in realtà una cartella, ma in realtà crea solo un file "SavedSearch", che è illeggibile tranne che dal Finder, quindi la mia applicazione non può visualizzarlo.

È possibile creare una vera cartella dinamica che si aggiornerà appena il filesystem cambia? O forse essere in tempo reale sarebbe troppo stressante, quindi con un programma? Potevo vedere magari inventare qualcosa in Automator ma ... non so suonare un po 'pesante. Mi piacerebbe sapere se c'è un modo migliore!

    
posta Jonathan van Clute 16.04.2017 - 22:28
fonte

1 risposta

2

Ho trovato una soluzione per creare una cartella "soft link" dinamica:

Premessa:

  • $ HOME è il risultato della variabile ambientale HOME qui. Quando accedi come utente example_user , $ HOME è quindi il percorso della cartella home di example_user : / Users / example_user. Se $ HOME appare nel testo qui sotto, devi sostituirlo tu stesso con / Users / nome_utente / (ad esempio salvando l'agente di lancio). Se $ HOME appare in una casella di codice qui sotto (ad esempio nello script della shell) verrà espanso automaticamente nella tua cartella home dalla shell (bash) durante l'esecuzione dello script.
  • mdimport -A|sed $'s/\t\t/;/g;s/(null)//g'|tr -d \' mostra molti attributi di metadati tra cui scegliere come criteri di ricerca (ad es. kMDItemAudioBitRate o kMDItemDurationSeconds)
  • mdls /path/to/file elenca tutti gli attributi dei metadati di un file scelto

Creazione di una cartella di collegamento dinamico:

  • Crea uno script di shell samples.sh in $ HOME / bin / sh / con il seguente contenuto:

    #!/bin/bash
    
    # Define folders
    # Source folder (including files in subfolders)
    MusicSamples=$HOME/Music/Samples
    # Destination folder
    DrumFoldr=$HOME/Desktop/Samples
    
    # Remove orphaned soft links in the destination folder
    find $DrumFoldr -type l -exec sh -c 'for x; do [ -e "$x" ] || rm "$x"; done' _ {} +
    
    # Add soft links in destination folder depending on some criteria (here: BitRate and UserTag)
    for File in $(mdfind -onlyin $MusicSamples 'kMDItemAudioBitRate >= "44000"  && _kMDItemUserTags = "Sample"')
    do
        ln -s $File $DrumFoldr
    done
    
    # Remove soft links in the destination folder depending on some criteria (removing UserTag from original file)
    for File in $(mdfind -onlyin $MusicSamples '_kMDItemUserTags != "Sample"')
    do
        filename=$(basename "$File")
        rm $DrumFoldr/$filename
    done
    

    Nello script della shell definisci la tua cartella musicale contenente i file di esempio (nel mio esempio si tratta di una cartella Samples nella cartella Music) e il "DrumFoldr" contenente i collegamenti software successivamente (nel mio esempio è una cartella Samples sul mio desktop) .

    Ora scegli alcuni criteri di ricerca Spotlight (nel mio esempio ho scelto il bit rate e un tag definito dall'utente "Sample" - puoi definire i tag utente facendo clic con il pulsante destro del mouse su un file > Tag ... e aggiungendo un tag da basta scrivere qualcosa. Il tag definito dall'utente è quindi disponibile per altri file e cartelle.

    Loscriptdishelldicuisopraaggiungeràsoloifileconunafrequenzadicampionamentodi44000osuperioree(questoèlogicoe!)coniltagutente"Sample" come soft link alla cartella DrumFoldr. Quindi la cartella di destinazione non contiene collegamenti a file senza il tag Sample ma con una frequenza di campionamento di 96k o file con il tag Sample ma senza un kMDItemAudioBitRate (come i file txt o pdf). Fa anche un po 'di pulizia nella cartella DrumFoldr.

    BTW: la lunghezza della musica può essere cercata / determinata usando la chiave kMDItemDurationSeconds: kMDItemDurationSeconds <= "2" .

  • Crea un file usr.samplesync.plist in $ HOME / Libreria / LaunchAgents (che significa: /Users/<username>/Library/LaunchAgents/ ) con il contenuto:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>Label</key>
        <string>usr.samplesync</string>
        <key>ProgramArguments</key>
        <array>
            <string>/bin/bash</string>
            <string>/Users/<username>/bin/sh/samples.sh</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>StartInterval</key>
        <integer>10</integer>
    </dict>
    </plist>
    

    Sostituisci <username> con il tuo nome utente breve. Lo script della shell verrà eseguito ogni 10 secondi. Puoi aumentare l'intervallo in base alle tue esigenze e all'ambiente a valori più alti (ad esempio 60 = 1 minuto o 600 = 10 minuti)

  • Carica l'agente di lancio con:

    launchctl load $HOME/Library/LaunchAgents/usr.samplesync.plist
    

Se vuoi salvare lo script della shell da qualche altra parte devi applicare il percorso nel plist di conseguenza.

Avvertenze:

  • i file di esempio originali non devono contenere spazi nei loro percorsi o nomi di file (provo a risolvere questa restrizione in un secondo momento)
  • i file di esempio originali non devono essere spostati o la rimozione del tag utente non eliminerà il collegamento software

Cose da migliorare:

  • non creare un collegamento software se esiste già uno corretto
risposta data 17.04.2017 - 11:02
fonte

Leggi altre domande sui tag