¿Cómo eliminar todos los archivos de más de 3 días cuando la “lista de argumentos es demasiado larga”?


89

Tengo un directorio de archivos de registro que tiene 82000 archivos y directorios (aproximadamente la mitad y la mitad).

Necesito eliminar todos los archivos y directorios que tengan más de 3 días.

En un directorio que tiene 37000 archivos, pude hacer esto con:

find * -mtime +3 -exec rm {} \;

Pero con 82000 archivos / directorios, aparece el error:

/ usr / bin / find: lista de argumentos demasiado larga

¿Cómo puedo evitar este error para poder eliminar todos los archivos / directorios que tienen más de 3 días?


1
¿Usted ha intentado find -mtime +3 -exec rm {} +?
Gilles Quenot

1
Creo que correr find * -mtime +3 |xargs rmsolucionaría ese problema.
Mats Petersson

9
Creo que el único problema es find *. find .es mejor. El shell globing con expande *a una enorme lista de archivos y directorios.
ruido sin

@artlessnoise es perfecto.
sjas

Respuestas:


120

Para eliminar todos los archivos y directorios dentro del directorio actual :

find . -mtime +3 | xargs rm -Rf

O alternativamente, más en línea con el comando original del OP:

find . -mtime +3 -exec rm -Rf -- {} \;

26
-1 El problema es la estrella en "buscar *", lo resolvió usando "buscar". en lugar. Xargs es engañoso aquí.
Aleksandr Levchuk

7
@AleksandrLevchuk resuelve el problema de OP y, por lo tanto, no merece un
voto negativo

11
Pregunta: "buscar * -mtime +3 -exec rm {} \;" da una lista de argumentos demasiado larga. Respuesta: Utilice "buscar. -Mtime +3 -exec rm {} \;"
Aleksandr Levchuk

2
Es posible que desee agregar --después de rm, comofind . -mtime +3 -exec rm -- {} \;
domen

8
Nadie dijo para qué --sirve.
Acumenus

59

También puede utilizar:

find . -mindepth 1 -mtime +3 -delete

Para no eliminar el directorio de destino


4
La mejor respuesta, mucho más limpia que llamar a rm (y probablemente más segura). También funciona para subdirectorios.
básico 6 de

16

Otra solución para la pregunta original, esp. útil si desea eliminar solo ALGUNOS de los archivos más antiguos en una carpeta, sería algo como esto:

find . -name "*.sess" -mtime +100 

y así sucesivamente ... Las comillas bloquean los comodines de shell, lo que le permite "encontrar" millones de archivos :)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.