¿Son posibles las carpetas dinámicas verdaderas (NO una búsqueda guardada en “carpeta inteligente”)?

1

Estoy usando una aplicación que carga el contenido de una carpeta de muestras de audio para mi uso. Sin embargo, las muestras que quiero usar están dispersas en muchas carpetas de mi máquina, y no quiero copiarlas todas en una sola carpeta primero.

Los alias funcionan bien, y pude crear enlaces simbólicos de todos los archivos deseados, colocarlos en una sola carpeta y cargar esa carpeta. Excelente solución, excepto por una cosa.

Voy a agregar más archivos a lo largo del tiempo que cumplan con los criterios que utilizo para esta aplicación. Me encantaría poder usar una carpeta dinámica que esencialmente sería lo que son las "carpetas inteligentes", excepto una carpeta real. Una "carpeta inteligente" de Mac no es en realidad una carpeta, sino que simplemente crea un archivo "SavedSearch", que es ilegible excepto por el Finder, por lo que mi aplicación no puede verlo.

¿Es posible crear una verdadera carpeta dinámica que se actualizará a medida que cambie el sistema de archivos? ¿O tal vez ser en tiempo real sería una gran tensión, por lo que en un calendario? Podría ver tal vez inventando algo en Automator pero ... No sé que suene un poco pesado. Me encanta saber si hay una mejor manera!

    
pregunta Jonathan van Clute 16.04.2017 - 22:28

1 respuesta

2

He encontrado una solución para crear una carpeta dinámica de "enlace flexible":

Prefacio:

  • $ HOME es el resultado de la variable ambiental HOME aquí. Cuando inicia sesión como usuario example_user , $ HOME es la ruta a la carpeta de inicio de example_user : / Users / example_user. Si aparece $ HOME en el texto a continuación, debe reemplazarlo usted mismo con / Users / su_nombre_usuario / (por ejemplo, guardar el agente de inicio). Si $ HOME aparece en un cuadro de código a continuación (por ejemplo, en el script de shell), se expandirá automáticamente a su carpeta de inicio con el shell (bash) mientras ejecuta el script.
  • mdimport -A|sed $'s/\t\t/;/g;s/(null)//g'|tr -d \' muestra una gran cantidad de atributos de metadatos para elegir como criterios de búsqueda (por ejemplo, kMDItemAudioBitRate o kMDItemDurationSeconds)
  • mdls /path/to/file enumera todos los atributos de metadatos de un archivo elegido

Creando una carpeta de enlace dinámico:

  • Cree un script de shell samples.sh en $ HOME / bin / sh / con el siguiente contenido:

    #!/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
    

    En el script de shell, defina su carpeta de música que contiene los archivos de muestra (en mi ejemplo, que es una carpeta de Muestras en la carpeta de Música) y el "DrumFoldr" que contiene los enlaces suaves más adelante (en mi ejemplo, que es una carpeta de Muestras en mi escritorio) .

    Ahora elija algunos criterios de búsqueda de Spotlight (en mi ejemplo, he elegido la tasa de bits y una etiqueta "Ejemplo" definida por el usuario: puede definir etiquetas de usuario haciendo clic con el botón derecho en un archivo > Etiquetas ... y agregando una etiqueta al simplemente escribiendo algo. La etiqueta definida por el usuario estará disponible para otros archivos y carpetas.

    Elscriptdeshellanteriorsoloagregaráarchivosconunafrecuenciademuestreode44000osuperiory(¡estoeslógicoy!)conlaetiquetadeusuario"Muestra" como enlace flexible a la carpeta DrumFoldr. Por lo tanto, la carpeta de destino no contendrá enlaces a archivos sin la etiqueta de muestra pero con una frecuencia de muestreo de 96k o archivos con la etiqueta de muestra pero sin un kMDItemAudioBitRate (como archivos txt o pdfs). También hace algo de limpieza en la carpeta DrumFoldr.

    BTW: la duración de la música se puede buscar / determinar usando la clave kMDItemDurationSeconds: kMDItemDurationSeconds <= "2" .

  • Cree un archivo usr.samplesync.plist en $ HOME / Library / LaunchAgents (que significa: /Users/<username>/Library/LaunchAgents/ ) con el contenido:

    <?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>
    

    Reemplace <username> por su nombre de usuario corto. El script de shell se ejecutará cada 10 segundos. Puede aumentar el intervalo según sus necesidades y el entorno a valores más altos (por ejemplo, 60 = 1 minuto o 600 = 10 minutos)

  • Cargar el agente de inicio con:

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

Si desea guardar el script de shell en otro lugar, debe aplicar la ruta en la lista correspondiente.

Advertencias:

  • los archivos de muestra originales no deben contener espacios en sus rutas o nombres de archivos (intento resolver esta restricción más adelante)
  • los archivos de muestra originales no deben moverse o la eliminación de la etiqueta de usuario no eliminará el enlace flexible

Cosas que mejorar:

  • no cree un enlace flexible si ya existe uno adecuado
respondido por el klanomath 17.04.2017 - 11:02

Lea otras preguntas en las etiquetas