2011-06-28 8 views
11

Quiero escribir un guión en cualquiera de Ruby o Python que se verá en el contenido de un directorio y supervisar loseventos monitor en un sistema de archivos a medida que suceden

1. Any new files 
2. Any saves to existing files. 

no me molesta en lo que es diferente en los archivos, solo que se han guardado o son nuevos.

La secuencia de comandos luego devuelve el nombre del archivo (con su ruta completa) tal vez una vez cada 2 segundos o algo así.

Quiero analizar los archivos dentro de las carpetas a modo

mainfile.txt 
images/image1.jpg 
images/icons/icon1.png 

Todos estos archivos/carpetas deben ser montitored.

Finalmente quiero FTP los archivos que han cambiado/se han agregado pero me complace conformarme con una solución a la primera parte del problema, ya que sé cómo ftp (pero, por supuesto, incluye esto si quieres a!)

estoy usando OSX 10.5.8

Respuesta

1

me gustaría recomendar el uso de una herramienta diseñada por lo que estás describiendo - rsync.

rsync hará todo este trabajo de campo para usted. Comprobará si hay archivos modificados o nuevos, y los scp (y optimizará solo copiando los fragmentos del archivo que cambió, no el archivo completo) en el host de destino.

rsync -a mainfile.txt images/image1.jpg images/icons/icon1.png remotehost:/directory/to/sync/files/to 

Si también desea una lista de los archivos sincronizados que quedó terminado, se puede ajustar el registro de rsync mediante la adición:

-q --log-format="%f" 

Sin embargo, incluso esto no suena muy parecido a lo que eres después. Parece que desea un sistema de archivos de replicación rápido, no una copia frecuente frecuente.

Un sistema de archivos de replicación sabrá el instante en que se realizan los cambios (después de todo los está haciendo en el sistema de archivos) y puede hacer los mismos cambios en el otro lado. No se necesita trabajo de su parte después de la configuración inicial. Eso puede no ser posible, tendrías que describir la situación más completamente.

3

Ah, viendo FTP. Da la casualidad, construí algo así para el trabajo. Mientras que el mío estaba lidiando con varias limitaciones, espero que no, la parte que se sentó en Linux fue fácil. OSX en este día y edad es en su mayoría un linux reenvasado.

Por lo tanto, debe poder instalar iwatch, que utiliza la función inotify kernel. Si no puede usar iWatch, lo cual sería muy sorprendente ya que está escrito en perl, la fuente debe indicarle cómo comunicarse directamente con inotify. This link tiene información sobre el uso de python con inotify.

Hay algunas otras alternativas a iwatch, pero todas se conectan a inotify. La única otra alternativa es hacer escaneos de directorio manual en un temporizador, que es torpe y debe evitarse. Lo hice en Windows, y tiene ... problemas. Si alguna vez tengo la oportunidad, voy a volver a trabajar en esa sección.

6

para Ruby aquí es una joya que puede ayudarle a: https://github.com/thibaudgg/rb-fsevent

FSEvent es el sistema que desee utilizar en OS X y esto es una unión llevándola a Ruby, esta joya es utilizado por la Guardia que es cómo lo encontré (https://github.com/guard/guard)

Incluso podría considerar usar Guard que proporcionan una buena API para monitorear archivos/rutas y ejecutar acciones en los cambios.

Editar: Desde que he publicado esta una nueva joya fue lanzado a la plataforma abstracta cosas específicas: https://github.com/guard/listen, esta joya proporcionar una API portátil para supervisar los eventos del sistema de archivos en múltiples plataformas

2

he creado una joya de rubí basado en guard para sincronizar archivos a un ftp cuando ocurren eventos del sistema de archivos, en una forma parecida a Dreamweaver. Es un poco joven, pero lo he estado usando en las últimas semanas sin ningún problema.

Se llama guard-ftpsync y creo que resuelve el problema exacto que tiene.

Cuestiones relacionadas