Elimine solo archivos de más de 7 días: -mtime y busque

Elimine solo archivos de más de 7 días: -mtime y busque

Encontré algunas preguntas similares pero no coincidían.

Tengo un directorio para copias de seguridad (sql) y quiero eliminar todos los archivos de ese directorio que tengan más de 7 días, dejando intactos los subdirectorios.

Esto es lo que tengo:

find /var/log/mbackups -mtime +7 -type f -delete

¿Es esta la forma correcta de lograr lo que busco?

Respuesta1

Su comando buscará en el directorio de nivel superior /var/log/mbackupsy también descenderá a cualquier subdirectorio, eliminando archivos que coincidan con el criterio de siete días. No eliminará los directorios en sí.

Si desea que un comando mire los archivos solo en el /var/log/mbackupsdirectorio yno descender a subdirectorios, necesitas agregar esa restricción:

find /var/log/mbackups -maxdepth 1 -mtime +7 -type f -delete

En general, puedes probar el findcomando reemplazando la -deleteacción con algo inocuo, como -print(también lo necesitas -depthaquí, como -deleteimplica -depth):

find /var/log/mbackups -depth -mtime +7 -type f -print

Respuesta2

Con zsh:

rm -f /var/log/mbackups/*(.m+6)

igual que:

rm -f /var/log/mbackups/*(.^m-7)

Eliminaría los .archivos normales (con) que no están ocultos y no se han modificado en los últimos 7 días. Al igual que for find's -mtime +7, m+7coincidiría con archivos cuya antigüedad redondeada hacia abajo al siguiente número entero de días sea estrictamente mayor que 7, por lo que coincidiría con archivos que tengan 8 días o más (un error común cuando se trabaja con find).

Para eliminar también archivos ocultos antiguos, agregue el Dcalificador glob.

Si no hay ningún archivo coincidente, recibirá un mensaje de error. Puede evitarlo agregando el Ncalificador glob (y rmluego se llamará sin el argumento de nombre de archivo, pero con -f, no debería quejarse).

Respuesta3

Descargo de responsabilidad: soy el autor actual de rawhide (rh) (verhttps://github.com/raforg/rawhide)

Casi. Está muy cerca. La versión correcta de su intento es:

find /var/log/mbackups -maxdepth 1 -mtime +6 -type f -delete

Si tu encuentrasencontrarEl argumento predicado de 's -mtimeno es suficientemente intuitivo, podrías usarcuero crudo(Rh) en cambio:

rh -UUU -r /var/log/mbackups 'f && old(7*days)'

-UUUdesvincula/elimina/elimina coincidencias.

-res comoencontrar's -mindepth 1 -maxdepth 1y solo busca exactamente un nivel debajo de las rutas de búsqueda, por lo que no se buscan subdirectorios.

fcoincide con archivos normales.

old(7*days)coincide con la última modificación realizada hace al menos 7 días.

Respuesta4

Advertencia: -deleteno es estándar (no es portátil) y su uso es riesgoso gfind.

Recuerde que rmtiene algunas restricciones de seguridad, pero la gfindpágina de manual no menciona dichas restricciones para -delete. Por lo tanto, recomiendo utilizar el método oficial:

find /var/log/mbackups -mtime +7 -type f -exec rm {} +

Esto no es ni siquiera más lento que el método no estándar que utiliza -delete.

información relacionada