Eliminar archivos de más de 500 días


10

Tengo un directorio con archivos del año 2010 .. Quiero eliminar todos los archivos anteriores a 500 días y probé esto:

find /var/log/arc/* -type f -mtime +500 -delete {}\;      

Pero entiendo esto:

-bash: /usr/bin/find: Argument list too long

Como sé, esto significa que hay demasiados archivos y findno puedo manejarlos. Pero incluso si pongo más de +20003 años, sigo recibiendo esto.

¿Qué me estoy perdiendo aquí?


Respuestas:


18

Te falta que findno necesita una lista de archivos como entrada. El problema es que el globo se /var/log/arc/*expande a demasiados archivos. Sin embargo, se findrepetirá en subdirectorios de forma predeterminada, por lo que no es necesario usar el glob en absoluto:

find /var/log/arc/ -type f -mtime +500 -delete

-deletees un predicado no estándar. Si su findimplementación no lo admite, puede usar:

find /var/log/arc/ -type f -mtime +500 -exec rm -f {} +

en lugar.


Gracias pero ahora tengo esto: find: invalid predicate -delete ''
Garg

1
@Garg primero, lo siento, acabo de copiar tu comando y no me di cuenta de que tu sintaxis es incorrecta. El -deleteno toma {}. Ver actualización. Sin embargo, su mensaje de error parece sugerir que su versión de findno es compatible -delete. Si no está usando GNU find(que en la mayoría de los casos no lo hará a menos que esté usando Linux), debe usarlo -exec -rm {} \;en su lugar.
terdon

Gracias. -exec rm {} \;Haz el truco.
Garg

1
@hobbs No veo por qué no, -execestá definido por POSIX .
terdon

@terdon mi error.
hobbs
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.