Borrado Programado
#1
Hola, me presento soy Pablo de Argentina, y hace poco que adquirí un qnap ts431.
Lo estoy utilizando con apps de back up, y carpetas compartidas en red y de sincronización. 
LO que me falta (no encontré un app que lo haga) es programar un trabajo de borrado de archivos en una determinada carpeta que tienen la misma extensión pero necesito hacerlo con aquellos que tengan una antiguedad de por ejemplo 10 días.
QUe sugerencia me dan? 
Desde ya gracias por adelantado!
Saludos.
  Responder
#2
Hola

Eso se debería hacer con un script de Linux.
Entiendo que podría ser útil para una carpeta de escaneados pdf de una máquina multifuncional y la extensión será algo del tipo *.pdf

Si puedo te intento poner un ejemplo del script que deberás incorporar al crontab de la Qnap.
Estoy buscando si se puede hacer sólo con una línea. 
Básicamente nos basaremos en el comando "find /share/carpetaScanner/*.pdf -mtime +9" que nos encuentra los archivos pdf de la carpeta compartida "carpetaScanner" que tienen 10 o mas días. Pero estoy mirando a ver si con -exec rm puedo concatenar la salida. En Qnap no me lo permite aunque en otros linux si Sad 
A lo mejor tenemos que apoyarnos en un fichero de texto  temporal a modo de auxiliar que contenga lo que vamos a borrar.
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny, TS-453Be, TR-002 y QHora-301w) Ʀɐɯ0η
  Responder
#3
Hola

Ya he dado con una línea de comando que lo hace todo (filtra y elimina)


find /share/carpeta1 -name "*.pdf" -type f -mtime +9 | while read temp; do rm "$temp" ; done

"carpeta1" es la carpeta compartida donde están los archivos a filtrar
"*.pdf* es la extensión de los archivos a eliminar
+9 indica que selecciona los archivos de 10 o más días de antigüedad

Ahora creamos un archivo llamada "eliminarPDF.sh" para poder agregarlo al programador. El contenido será el siguiente:
Código:
#! /bin/bash
find /share/carpeta1 -name "*.pdf" -type f -mtime +9 | while read temp; do rm "$temp" ; done


Ahora quedan un par de cosas a tener en cuenta. 

Puedes agregar manualmente el fichero de crontab y aplicarlo con la cadencia que quieras.

Si por ejemplo quieres que se ejecute a las 2:00AM todos los días debes agregar en el archivo /etc/config/crontab una línea como esta:
"* 2 * * * /share/Scripts/eliminarPDF.sh"
Aplicamos los cambios del crontab con "crontab /etc/config/crontab && /etc/init.d/crond.sh restart"

Recuerda que el archivo "/share/Scripts/eliminarPDF.sh" tienen que tener el atributo de ejecutable. Esto se hace con "chmod +x /share/Scripts/eliminarPDF.sh"

Pero si reinicias la nas perdemos la programación  Angry

Yo recomiendo las siguientes cosas, que te servirán para este script y para más cosas:

-crear un carpeta compartida llamada por ejemplo "scripts", donde dejaremos nuestros archivos de extensión .sh

-hacer que al inicio de la qnap se agregue la línea adecuada para que se ejecute el script que nos interesa. Yo esto lo estoy consiguiendo con una app ficticia llamada "autoinicio" , pero también se puede mediante un autorun.sh que se describe como hacerlo en este enlace.

La diferencia entre ambas es que cuando activo la de autoinicio se insertan líneas en el crontab, y cuando la desactivo desde el app center, se eliminan esas líneas insertadas.

Para hacer todo lo anterior, no podemos hacerlo si no tenemos acceso a la línea de comandos o consola. Yo suelo recomendar el uso de WinSCP que lo facilita bastante en PC
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny, TS-453Be, TR-002 y QHora-301w) Ʀɐɯ0η
  Responder
#4
Ganekogorta sos un CRACK!!!!!
Te agradezco un montón! Hoy mismo pongo tus líneas en práctica, muy claro lo tuyo, y en mi caso te cuento que lo voy a utilizar para borrar archivos de backup (.bak) que son de varias bd sql que se hacen completos y 2 veces por día, por eso mismo necesito ir liberando espacio por la cantidad de copias que hay. Abrazo!

Zorte on eta eskerrik asko zure laguntzagatik.
  Responder
#5
Hola
Me alegro que te sirva.
Lo que he enviado es genérico y aplicable a diversos usos.

Si no es indiscreción ¿qué tipo de base de datos es y en qué sistema operativo funcionan? Lo digo porque a lo mejor a la hora de hacer la copia, podemos indicar que elimine las más viejas...yo lo hago con una postgreSQL.


Un saludo

Agur eta ondo ibilli

Mon (TS-469Pro, TVS-673, QBoat Sunny y TS-453Be)
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny, TS-453Be, TR-002 y QHora-301w) Ʀɐɯ0η
  Responder
#6
Para nada es indiscreción, te cuento:
Son bases de datos de sqlserver 2008, los backups son programados con planes de mantenimeinto y los ejecuta el SQLAgent.
Dentro de dicho trabajo programado está la limpieza(borrado) de backups con más de 5 días de antigüedad pero no lo ejecuta si no está la copia dentro de un disco local(ya renegué un montón con eso). De ahí que tenga que hacerlo desde el qnap.
Saludos!
  Responder
#7
(10-09-2019, 06:31 PM)pabloclave escribió: Para nada es indiscreción, te cuento:
Son bases de datos de sqlserver 2008, los backups son programados con planes de mantenimeinto y los ejecuta el SQLAgent.
Dentro de dicho trabajo programado está la limpieza(borrado) de backups con más de 5 días de antigüedad pero no lo ejecuta si no está la copia dentro de un disco local(ya renegué un montón con eso). De ahí que tenga que hacerlo desde el qnap.
Saludos!
Prueba lo siguiente, Pon la ruta como en el formato de la imagen siguiente

   

Y prueba a ver porque a mi me funciona. Da un aviso de que no accede bien, pero luego si lo hace.

Yo en mi caso tengo la nas integrada en el AD, supongo que ese también será tu caso.

Y si no te va bien... a hacer el script en Linux
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny, TS-453Be, TR-002 y QHora-301w) Ʀɐɯ0η
  Responder
#8
(09-09-2019, 09:07 PM)Ganekogorta escribió: Hola

Eso se debería hacer con un script de Linux.
Entiendo que podría ser útil para una carpeta de escaneados pdf de una máquina multifuncional y la extensión será algo del tipo *.pdf

Si puedo te intento poner un ejemplo del script que deberás incorporar al crontab de la Qnap.
Estoy buscando si se puede hacer sólo con una línea. 
Básicamente nos basaremos en el comando "find /share/carpetaScanner/*.pdf -mtime +9" que nos encuentra los archivos pdf de la carpeta compartida "carpetaScanner" que tienen 10 o mas días. Pero estoy mirando a ver si con -exec rm puedo concatenar la salida. En Qnap no me lo permite aunque en otros linux si Sad 
A lo mejor tenemos que apoyarnos en un fichero de texto  temporal a modo de auxiliar que contenga lo que vamos a borrar.
Hola buenas tardes. Me gustaría saber que código implementar para eliminar tanto directorios como archivos, sea el nombre que sea, más antiguos de una fecha en concreto. Me estoy volviendo loco y no logro sacar el código. Podríais ayudarme compañeros??
  Responder
#9
(09-12-2022, 09:24 PM)isanchez@ticsam.com escribió: Hola buenas tardes. Me gustaría saber que código implementar para eliminar tanto directorios como archivos, sea el nombre que sea, más antiguos de una fecha en concreto. Me estoy volviendo loco y no logro sacar el código. Podríais ayudarme compañeros??

En caso de tratarse de un script Linux/QTS, seguramente te servirá esto:

Generas un fichero de referencia, con la fecha y el timestamp que te interese, y luego buscas los ficheros/directorios de "/ruta" que sean más antiguos o iguales que esa fecha, y los eliminas.
Por ejemplo, para eliminar ficheros/directorios más antiguos o iguales al 5 de febrero del 2020:

Código:
# touch -t 202002050000 /tmp/2020-Feb-05-0000
# find /ruta ! -newer /tmp/2020-Feb-05-0000 | xargs rm -rf
# rm -f /tmp/2020-Feb-05-0000

Si lo quieres todo en una línea
Código:
# touch -t 202002050000 /tmp/2020-Feb-05-0000 && ( find /ruta ! -newer /tmp/2020-Feb-05-0000 | xargs rm -rf ) && rm -f /tmp/2020-Feb-05-0000

El find no tiene operador de "más antiguo que", por lo que utilizamos el "más reciente que" negado (! -newer).

No lo he probado en QTS, pero sí en Linux, y he comprobado que QTS tiene la opción "-newer" de find y  el comando "xargs", por lo que debería funcionar.
Se podría hacer usando un bucle for o un while, iterando sobre lo devuelto por el find, pero xargs seguramente sea una opción más rápida y eficiente.
TS-253A 2x4TB RAID1 8GB RAM
“La inteligencia es la habilidad de evitar hacer trabajo y conseguir que el trabajo se haga.” (Linus Torvalds)
  Responder
#10
(10-12-2022, 01:00 AM)adrolmar escribió:
(09-12-2022, 09:24 PM)isanchez@ticsam.com escribió: Hola buenas tardes. Me gustaría saber que código implementar para eliminar tanto directorios como archivos, sea el nombre que sea, más antiguos de una fecha en concreto. Me estoy volviendo loco y no logro sacar el código. Podríais ayudarme compañeros??

En caso de tratarse de un script Linux/QTS, seguramente te servirá esto:

Generas un fichero de referencia, con la fecha y el timestamp que te interese, y luego buscas los ficheros/directorios de "/ruta" que sean más antiguos o iguales que esa fecha, y los eliminas.
Por ejemplo, para eliminar ficheros/directorios más antiguos o iguales al 5 de febrero del 2020:

Código:
# touch -t 202002050000 /tmp/2020-Feb-05-0000
# find /ruta ! -newer /tmp/2020-Feb-05-0000 | xargs rm -rf
# rm -f /tmp/2020-Feb-05-0000

Si lo quieres todo en una línea
Código:
# touch -t 202002050000 /tmp/2020-Feb-05-0000 && ( find /ruta ! -newer /tmp/2020-Feb-05-0000 | xargs rm -rf ) && rm -f /tmp/2020-Feb-05-0000

El find no tiene operador de "más antiguo que", por lo que utilizamos el "más reciente que" negado (! -newer).

No lo he probado en QTS, pero sí en Linux, y he comprobado que QTS tiene la opción "-newer" de find y  el comando "xargs", por lo que debería funcionar.
Se podría hacer usando un bucle for o un while, iterando sobre lo devuelto por el find, pero xargs seguramente sea una opción más rápida y eficiente.
Muchas gracias por tu pronta respuesta. Mañana probaré lo que indicas y te confirmo. Otra cosa, en vez de ser una fecha en concreto, podría ser más antiguos de x tiempo?? Es decir, eliminar directorios o ficheros sea el nombre que sea y más antiguos de 10 días atrás desde la fecha actual. 
Muchísimas gracias de nuevo!!
  Responder




Usuarios navegando en este tema: 2 invitado(s)