Foro QNAP en español

Versión completa: Detectar archivos nuevos en carpetas
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola

El usuario @Oroimenak plantea en otro hilo una cosa que creo que nos puede venir bien a varios.
Como usamos diversos programas de descargas se nos hace necesario tener algún tipo de aviso de que se ha completado la descarga de un nuevo archivo.

Yo lo que suelo hacer es tener estos pequeños scripts en una carpeta ubicada en /share/CACHEDEV1_DATA/Scripts . Recordad que es importante que estén dentro de "share" para que NO se borre tras los reinicios de la NAS.
Dependiendo de nuestros volúmenes de almacenamiento la ruta puede cambiar y ser del tipo  /share/MD0_DATA, /share/CACHEDEV2_DATA,...  si se hace un ls /share vereis los nombres que teneis en vuestra nas.

Dentro de esa carpeta creo un archivo con atributos de ejecución. Lo he llamado cambios.sh y su contenido es:

#! /bin/bash
# ruta donde creo archivos temporales
origen="/share/CACHEDEV1_DATA/Scripts"

# ruta que voy a examinar en busqueda de archivos añadidos (que no eliminados)
ruta="/share/CACHEDEV1_DATA/Public"

if [ -f $origen/listaoriginal.txt ]; then
echo "Existe el archivo listaoriginal.txt y creo el listado de los archivos actuales"
# creo archivo con la lista actual de archivos
ls $ruta/ > $origen/listaactual.txt
# comparo ambos archivos y obtengo las diferencias
diff -ab $origen/listaoriginal.txt $origen/listaactual.txt | grep "+" | grep -v "@" | grep -v "+++" > $origen/diferencias.txt
#compruebo si tiene contenido
if [ -s $origen/diferencias.txt ]; then
echo "Hay cambios ya que no tiene tamaño cero"
#comienzo a crear el archivo de correo a enviar
echo "Subject: Cambios en el directorio" > $origen/correo.txt
echo "From: remitente@correo.com" >> $origen/correo.txt
echo "To: destinatario@direccion.com" >> $origen/correo.txt
echo "" >> $origen/correo.txt
echo "Los siguientes archivos se han añadido:" >> $origen/correo.txt
cat $origen/diferencias.txt >> $origen/correo.txt
cat $origen/correo.txt | /usr/sbin/sendmail -t
rm $origen/correo.txt
ls $ruta/ > $origen/listaoriginal.txt
else
echo "No hay cambios de contenido en el directorio"
fi
rm $origen/diferencias.txt
rm $origen/listaactual.txt
else
    echo "No existe listaoriginal.txt y lo creo por primera vez"
ls $ruta/ > $origen/listaoriginal.txt
fi


Este archivo luego ha de agregarse al crontab de nuestra nas para que se ejecute tras "x" minutos y nos envíe un correo de aviso a "destinatario@direccion.com" en caso de adicciones.
muchas gracias por tu gran ayuda Ganekogorta, en cuanto saque un rato lo pruebo ya que me viene de lujo este script ya que no controlo aun manejarme con script.
Hola
Yo lo he probado y me funciona
Si quieres monitorizar diferentes carpetas, hay que hacer varios scripts con diferentes correos de aviso y sus correspondientes programaciones o bien modificar este para que haga varios comprobaciones.


Un saludo

Agur eta ondo ibilli

Mon (TS-469Pro, TVS-673, QBoat Sunny y TS-453Be)
Hola, buenas tardes, después de buscar información como un loco por el for ya que el tema de script se para que se utilizan pero ando muy verde en el tema de como hacer que se ejecuten.

he seguido tal cual lo explica Ganekogorta y tengo editado el Script.

He modificando mis datos de email y ruta donde se descargan los torrent por ejemplo

Cita:# ruta que voy a examinar en busqueda de archivos añadidos (que no eliminados)

ruta="/share/CACHEDEV1_DATA/Public"

 aqui debo de poner la ruta donde tengo los archivos descargados verdad?

uso Mac con lo cual acceder a través de consola y le daré permisos de ejecución


Cita:chmod +x /share/CACHEDEV1_DATA/Script/cambios.sh

Ahora para que se ejecute cada X minutos y añadirlo a contrab que es donde estoy perdido es de la siguiente forma?


 
Cita:        - vi /etc/config/crontab
          - Añadimos la linea: 5 * * * * /bin/bash /share/CACHEDEV1_DATA/Script/cambios.sh
  • Reiniciamos el cron: crontab /etc/config/crontab && /etc/init.d/crond.sh restart

de esa forma estaria ya correctamente?

gracias
Hola
Antes de añadirlo al crontab ejecútalo manualmente para comprobar que funciona.
Para ejecutarlo ejecuta:
“cd /share/CACHEDEV1_DATA/Scripts”
“./cambios.sh”

Ahí verás mensajes que son el resultado de los “echo”.
Ahora provoca un cambio añadiendo un archivo a la carpeta que monitorizas.
Ejecuta de nuevo
“./cambios.sh”

Te debería llegar un correo con el cambio.

Si todo ha ido bien. Agrégalo en el crontab, pero con la línea que has puesto se hace cada hora en el minuto 5.
Cambia ese “5” del inicio por “*/5”.

Aunque yo personalmente bajaría la frecuencia a */15 o incluso a */30


Un saludo

Agur eta ondo ibilli

Mon (TS-469Pro, TVS-673, QBoat Sunny y TS-453Be)
muchas gracias Ganekogorta, ayer lo probé. y funciona de lujo, he realizado varias pruebas metiendo alguna archivo nuevo y como tu indicas cada x tiempo revisa la carpeta y me manda un email con lo nuevo que se ha agregado.

al final cambie la orden de contrab como tu me dijiste.


Cita:/30 * * * * /bin/bash /share/CACHEDEV1_DATA/Script/cambios.sh


creo que así esta correctamente escrita verdad?


otra cosa mas, ayer mirando las carpetas que genera Rtorrent he encante una llamada script y dentro habia este, no controlo mucho de programación te lo pego aquí para que le eches un ojo.


Cita:#!/bin/sh

# rTorrent event script handler
#
# Script launcher. DO NOT MODIFY!
#
# Usage:
# a) In the directory: /share/Rdownload/sh-script
#    create file named: finished-*.sh
#
#    (eg. finished-sendmail.sh)
#
# b) set executables permissions:
#    # chmod a+x -R /share/Rdownload/sh-script/*.sh
#

DIR="/share/Rdownload/sh-script"
FILES="${DIR}/finished*.sh"

if [ ! -d "$DIR" ]; then
echo "Directory $DIR not exist."
exit 0
fi

if [ -z "$3" ]; then
cat <<-EOF
Missing arguments. Syntax:
# $(basename $0) <hash> <name> <path> [label]

Arguments:
hash - torrent infohash
name - torrent name
path - torrent data path

Optional arguments:
label - torrent label
EOF
exit 0
fi

# Call custom handler scripts
for i in $FILES
do
echo Execute: $i $@
test ! -x "$i" || "$i" "$@" >> $DIR/log
done

# important status exit otherwise will break other executions
exit 0
La línea de crontab debe ser

*/30 * * * * /bin/bash /share/CACHEDEV1_DATA/Script/cambios.sh para que se ejecuta cada 30 minutos
/30 * * * * /bin/bash /share/CACHEDEV1_DATA/Script/cambios.sh esta es para ejecutarse a las 00:30 , 01:30, 02:30.... es decir cada 60 minutos, cuando son y media.
(28-06-2019, 02:32 PM)Ganekogorta escribió: [ -> ]La línea de crontab debe ser

*/30 * * * * /bin/bash /share/CACHEDEV1_DATA/Script/cambios.sh para que se ejecuta cada 30 minutos
/30 * * * * /bin/bash /share/CACHEDEV1_DATA/Script/cambios.sh esta es para ejecutarse a las 00:30 , 01:30, 02:30.... es decir cada 60 minutos, cuando son y media.

Ok. Gracias. Ahora lo cambio. Has podido echar un Ojo al script que he puesto? Que hace realmente? No entiendo mucho de programación.
Hola
Yo tampoco me muevo bien con bash (vengo del mundo Dos/Windows).

Pero al parecer lo que hace es ejecutar archivos sh ubicados en “/share_/Rdownload/sh-script” tras acabar las descargas.

En las primeras líneas de comentarios te indica donde crearlos y como hacerlos ejecutables por cambio de atributos con el
comando chmod


Un saludo

Agur eta ondo ibilli

Mon (TS-469Pro, TVS-673, QBoat Sunny y TS-453Be)
Ok. Gracias de nuevo