Monitoree una carpeta OSX para cambios de archivo y luego ejecute un script bash [duplicado]

10

Posible duplicado:
ver el sistema de archivos en tiempo real en OS X y Ubuntu

Estoy buscando un método eficiente para monitorear un directorio local en OSX y si algún archivo ha sido cambiado en ese directorio, ejecute un script bash para confirmar los archivos en github.

¿Alguna herramienta recomendada para monitorear un directorio en busca de cambios de archivos, y luego activar una acción, es decir, un script bash?

Tegan Snyder
fuente
1
Esta pregunta tal cual es limítrofe con una recomendación de software, que generalmente no se permite en Superusuario . Intente reformularlo para hacer su pregunta raíz, "¿Cómo puedo confirmar automáticamente los cambios y enviarlos desde un repositorio git cada vez que se agregan / eliminan / cambian archivos?"
Darth Android
@DarthAndroid, de acuerdo con las preguntas frecuentes, esta pregunta está bien tal como está. El OP no está pidiendo compras ni consejos de compra.
ephsmith
1
@eph El OP está pidiendo recomendaciones para algo, lo cual está bastante fuera de tema. Sin embargo, el problema principal es que no están explicando su problema y solo piden su intento de solución.
slhck
El problema es simple. Supervise los cambios en un directorio y confirme esos cambios en un repositorio. Todo está en la pregunta del OP. El enlace que proporcionó tiene la respuesta. Buena llamada.
ephsmith

Respuestas:

19

Usando fswatch desde su repositorio:

fswatch . 'git commit -avm "snapshot at ${date}"'

Este simple ejemplo solo detectaría cambios en los archivos que ya están en el repositorio.

Pierre Carrier
fuente
Esto se puede hacer con acciones de carpeta que están integradas en OS X. Vea la respuesta a través del enlace que slhk proporcionó anteriormente.
ephsmith
1
Puede ampliar su respuesta agregando un ejemplo que explique lo que el OP quiere lograr. Simplemente publicar un enlace no es recomendable.
slhck
Esto parece alentador. Creo que podría ejecutar ./fswatch / some / dir ./some/dir/bash_script.sh
Tegan Snyder
+1 - Lo intenté fswatchdespués de leer tu respuesta. Excelente utilidad, muy similar a la inotifyde Linux y hace uso del nativo de OS Xfsevent
cwd
2

Una opción sería simplemente usar launchd. Guarde una lista de propiedades como esta ~/Library/LaunchAgents/com.superuser.445907.plist, y cárguela con launchctl load ~/Library/LaunchAgents/com.superuser.445907.plisto al cerrar sesión y volver a iniciarla.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd>
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.superuser.445907</string>
    <key>Program</key>
    <string>/Users/username/script</string> <!-- ~/ doesn't work -->
    <key>WatchPaths</key>
    <array>
        <string>/Users/username/Folder/</string>
    </array>
    <key>ThrotteInterval</key>
    <integer>0</integer> <!-- run at most every 0 seconds, by default 10 -->
</dict>
</plist>

Lanzado solo registra los cambios en los archivos cuando se guardan atómicamente, o se eliminan y recrean cada vez que se guardan. La mayoría de las aplicaciones de OS X realizan guardados atómicos de forma predeterminada, pero por ejemplo TextMate y vim no lo hacen. No se detectan cambios en las subcarpetas de las carpetas observadas.

launchctl unload $path && launchctl load $path aplica cambios a un plist.

Ver man launchdy man launchd.plistpara más información.

Lri
fuente
Enfoque interesante Lo echaré un vistazo y me pondré en contacto contigo. Gracias por la respuesta.
Tegan Snyder
Este método definitivamente tiene sus limitaciones. No puede detectar cambios en subcarpetas de carpetas vigiladas. Esta técnica tampoco le dice qué archivo tuvo un evento (archivo nuevo, modificación, eliminación, etc.), solo que la ruta tuvo un evento.
Volomike