¿Cómo observar automáticamente los cambios en los archivos y realizar una acción personalizada dentro del shell?

6

Por ejemplo, me gustaría ejecutar automáticamente YUI Compressor cada vez que edito un archivo fuente JavaScript para generar un versión comprimida.

Lo ideal es que el proceso no se ejecute en segundo plano, sino en un shell dedicado, por lo que puedo finalizar el proceso fácilmente al final del día.

¿Cuál sería la forma más limpia y flexible de ver archivos y / o directorios específicos en busca de cambios en los archivos y realizar una acción personalizada dentro de un shell?

    
pregunta Gerry 07.08.2012 - 11:00

2 respuestas

2

El Codekit de $ 25 vigila las carpetas y los archivos en busca de cambios y comprime / minimiza / combina archivos de JavaScript y CSS.

Sé que esta es solo una respuesta parcial a tu pregunta, ya que no es un observador genérico, pero se ajusta a tu ejemplo:

  

cada vez que edito un archivo fuente de JavaScript para generar un archivo comprimido   versión

    
respondido por el Pro Backup 07.08.2012 - 14:48
1

Ver un archivo en busca de cambios se puede lograr con un LaunchAgent. Por ejemplo, cree un archivo plist en ~/Library/LaunchAgents/watch.and.lol.plist y llénelo con este 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>watch.and.lol</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/Shared/changeAction.sh</string>
        <string>-force</string>
    </array>
    <key>WatchPaths</key>
    <array>
        <string>/private/var/radmind/client/.radmindOnDemand</string>
    </array>
</dict>
</plist>

Ahora asegúrese de que el archivo /private/var/radmind/client/.radmindOnDemand existe. Luego carga el launchagent con el comando $ launchctl load ~/Library/LaunchAgents/watch.and.lol.plist . Tan pronto como el archivo ~/Library/LaunchAgents/watch.and.lol.plist ya no exista, este trabajo launchagent se descargará.

Ahora escriba un script de shell que observe los cambios en su archivo, como:

chsum1=""

while [[ true ]]
do
    chsum2='md5 /private/var/radmind/client/.radmindOnDemand'
    if [[ $chsum1 != $chsum2 ]] ; then           
        compile
        chsum1='md5 /private/var/radmind/client/.radmindOnDemand'
    fi
    sleep 2
done

Nota: este script de shell necesita un poco de trabajo adicional para que sea eficiente. Ahora sondea cada 2 segundos ( sleep 2 ). Es mejor salir del script después de que se haya ejecutado el comando compile . Eso requiere el almacenamiento de la salida del comando hash md5 que puede sobrevivir a la salida y la nueva conexión de este script de shell.

    
respondido por el Pro Backup 07.08.2012 - 18:00

Lea otras preguntas en las etiquetas