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 inotify
para 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
create
evento no es correcto, ya que lo harámv
en un archivo que puede no copiarse completamente en el disco. Vea la respuesta de @Gilles, usando elclose_write
evento en su lugar.El comando
inotifywait
imprime 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_write
eventos. Si escribe en el archivo en una ubicación temporal y luego lo mueve a su lugar, escuche losmoved_to
eventos. Pase las opciones-m -q
ainotifywait
para que siga escuchando eventos (de forma predeterminada, solo espera el próximo evento) e imprime solo mensajes relevantes.fuente
inotifywait
generar 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 -r
oxargs
.inotifywait
es 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.