Puedes lograr esto usando inotifywait
de inotify-tools. Tu kernel debe estar construido con CONFIG_INOTIFY_USER=y
para que esto funcione. Puedes confirmarlo con:
~# zcat /proc/config.gz | grep INOTIFY
O la existencia del directorio /proc/sys/fs/inotify
. /proc/config.gz
puede no existir en todos los dispositivos dependiendo de la configuración de construcción del kernel.
Supongamos que /data/data/com.xyz/files/
es el directorio que quieres observar.
~$ mkdir -p /sdcard/backup/
~# inotifywait -rm --format '%w%f' -e create /data/data/com.xyz/files/ |
while read file
do
[ -f "$file" ] && cp -av "$file" /sdcard/backup/
done
-e create
es el evento que informa que un archivo/directorio se crea en el directorio observado, --format
es para obtener el nombre del archivo con la ruta completa, -m
es para observar continuamente y -r
establece observaciones de forma recursiva. -d
puede demonizar el proceso, es decir, correr en segundo plano.
Todos los archivos recién creados en el directorio observado o en cualquier subdirectorio serán copiados a /sdcard/backup
.
También puedes usar busybox inotifyd
para casos de uso simples como se explica aquí. Para más opciones consulta inotifywait(1).
RELACIONADO: ¿Cómo identificar la app/proceso que vuelve a montar las particiones R/W, crea archivos y cambia permisos de archivos?
0 votos
Estoy bastante seguro de que hay una forma de monitorear un directorio para cambios, al menos a veces... Comenzaría buscando eso.
0 votos
@Xen2050 encontré la respuesta, puedo hacerlo con inotify, pero como el sistema operativo es Linux en Android, no puedo instalarlo fácilmente. Estoy intentando instalarlo.
0 votos
Creo que inotify tiene razón, no tengo ni idea de cómo hacer que funcione con Android. Posiblemente un programa/script que simplemente lea un directorio cada segundo y copie inmediatamente los archivos nuevos podría funcionar también, pero podría ser intensivo en recursos y ralentizar las cosas.
0 votos
@Xen2050 está en un emulador, así que no me importa el rendimiento
0 votos
¿Podrías simplemente hacer un bucle con algunos comandos find/ls y
sleep 0.25
, tal vez con un array de archivos encontrados, y luego cuando cambie hacer algo?0 votos
@Xen2050 hay una gran aplicación llamada BusyBox y la aplicación tiene todos los paquetes importantes, incluido inotify, y también es muy fácil de usar e instalar.