Soy un novato completo en Linux, pero estoy empezando a entenderlo. Tengo un Ubuntu Server 16.04 que ejecuta un servidor FTP para respaldar archivos de video de seguridad. Los archivos se almacenan en carpetas como: /home/securityfolder1
, /home/securityfolder2
, /home/securityfolder3
y así sucesivamente.
Tenga en cuenta que cada uno securityfolderN
es un usuario diferente.
Porque yo no quiero que mis discos duros a estar lleno todo el tiempo, quiero borrar archivos mayores de 7 días en estas carpetas diarias.
files
cron
delete
automation
Jacco van de Wijgaart
fuente
fuente
/home
generalmente contiene una subcarpeta para cada usuario. Si no desea almacenar las copias de seguridad como los diferentes usuarios (no muy buena idea), se debe considerar otra ubicación, por ejemplo,/home/security/backup1
y así sucesivamente.Respuestas:
Primero, este comando buscará y eliminará todos los archivos anteriores a 7 días en cualquier subdirectorio
/home
cuyo nombre comience consecurityuser
:Necesita
-mtime +6
y no+7
porque-mtime
cuenta períodos de 24h. Como se explica en la-atime
sección deman find
(-mtime
funciona de la misma manera):Por lo tanto, para encontrar un archivo que se modificó hace 7 o más días, debe buscar archivos que se modificaron hace más de 6 días, por lo tanto
-mtime +6
.El siguiente paso es ejecutar este comando una vez al día. Dado que cada uno
securityuserN
es un usuario diferente (es posible que desee repensar esa configuración, hace que todo sea más complicado), esto debe ejecutarse como root. Entonces, edita/etc/crontab
:Y agregue esta línea:
Eso ejecutará el
find
comando una vez al día y eliminará los archivos.fuente
find '/home/securityuser/*' -mtime +6 -type f -delete
(con todos los cambios pertinentes y apropiados en la creación de usuarios) en general podría ser una mejor idea quefind '/home/securityuser*' -mtime +6 -type f -delete
(sin barra en el camino) ...?/home/securityuserN
, por lo que sin la barra, no se encontrarán.-name
:find /home/ -name 'securityuser*' -mtime +6 -type f -delete
'securityuser*'
. El comodín debe ser ampliado por el shell, y no porfind
, por lo que debería haber sidosecurityuser*
(sin comillas). Ver respuesta actualizada. Gracias por señalarlo, Stelio, no puedo creer que nadie se dio cuenta antes! Ti vlakas!Según mi conocimiento:
prueba
find
comando como este:fuente
find /home/jacco/ -mtime +1 -type f -delete
y parece funcionar. ¿Cómo puedo automatizar esto?#!/bin/bash
el código debajo? o soy realmente estúpido aquí?find '/u*' -name local
. Esas directivas como-name "foo*"
esa deberían citarse cuando contienen caracteres globales.