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í?

Garg
fuente
1
unix.stackexchange.com/a/239268/116858 (ver también comentario)
Kusalananda

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.

terdon
fuente
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