Estoy tratando de encontrar una manera de mover inmediatamente un archivo a otra carpeta tan pronto como aparezca en mi Dropbox en CentOS.
He buscado en Internet algunas pistas, pero no puedo ir más allá del hecho de que necesito usar inotifypara invocar un script que procesará el archivo tal como aparece.
Mi conocimiento de BASH es muy limitado y dudo que pueda escribir esto en PHP.
En otras palabras, ¿cómo puedo mover un archivo a otra carpeta tan pronto como aparece usando inotify?

Respuestas:
Este es un enfoque simple:
Con más detalles sobre los tipos de archivos que desea mover, puede agregar algunas comprobaciones, registros, etc.
fuente
createevento no es correcto, ya que lo harámven un archivo que puede no copiarse completamente en el disco. Vea la respuesta de @Gilles, usando elclose_writeevento en su lugar.El comando
inotifywaitimprime un mensaje cada vez que cambia el contenido del directorio especificado. Tendrá que elegir el evento correcto: no cuando se crea el archivo, sino cuando Dropbox ha terminado de descargarlo. No sé exactamente cómo funciona Dropbox. Si escribe en el archivo en su lugar final, escuche losclose_writeeventos. Si escribe en el archivo en una ubicación temporal y luego lo mueve a su lugar, escuche losmoved_toeventos. Pase las opciones-m -qainotifywaitpara que siga escuchando eventos (de forma predeterminada, solo espera el próximo evento) e imprime solo mensajes relevantes.fuente
inotifywaitgenerar nombres de archivo terminados en nulo. Lo mejor que pude hacer fue usar un personaje que sea menos probable que Newline, por ejemplo%f$'\001', y usar-d $'\001'conwhile IFS= read -roxargs.inotifywaites molesto de esa manera. Puede usar algo como//%f, ya que el nombre del archivo nunca contendrá una barra doble siempre que la ruta a mirar no lo haga; entonces la molestia está en el lado del análisis.