
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/mbackups
y 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/mbackups
directorio 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 find
comando reemplazando la -delete
acción con algo inocuo, como -print
(también lo necesitas -depth
aquí, como -delete
implica -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+7
coincidirí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 D
calificador glob.
Si no hay ningún archivo coincidente, recibirá un mensaje de error. Puede evitarlo agregando el N
calificador glob (y rm
luego 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 -mtime
no es suficientemente intuitivo, podrías usarcuero crudo(Rh) en cambio:
rh -UUU -r /var/log/mbackups 'f && old(7*days)'
-UUU
desvincula/elimina/elimina coincidencias.
-r
es comoencontrar's -mindepth 1 -maxdepth 1
y solo busca exactamente un nivel debajo de las rutas de búsqueda, por lo que no se buscan subdirectorios.
f
coincide con archivos normales.
old(7*days)
coincide con la última modificación realizada hace al menos 7 días.
Respuesta4
Advertencia: -delete
no es estándar (no es portátil) y su uso es riesgoso gfind
.
Recuerde que rm
tiene algunas restricciones de seguridad, pero la gfind
pá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
.