os x terminal: elimine los archivos anteriores a x días

6

intentando crear un script que elimine los archivos anteriores a X días. ¿Parecía lo suficientemente directo pero todos los archivos parecen ser eliminados?

find /Volumes/Groups/Projects/530_BFAMI/test/ -ctime +30 -print -exec rm {} \;

¿Alguna idea bienvenida?

¿También sería bueno imprimir la información del archivo para las coincidencias ya que quizás mis fechas son engañosas en el buscador?

    
pregunta v3nt 13.06.2011 - 15:56

4 respuestas

12

Nunca sugiero -exec rm ... .

rm es simplemente un comando demasiado peligroso. Siempre corra en seco primero. En mi humilde opinión es mejor usar esto:

find /Volumes/Groups/Projects/530_BFAMI/test/ -ctime +30 -print0 | xargs -0 -n1

esto mostrará el recorrido en seco y solo cuando esté satisfecho puede agregar el rm al final

find /Volumes/Groups/Projects/530_BFAMI/test/ -ctime +30 -print0 | xargs -0 rm

Si empiezas a usar esta versión piped to xargs , siempre puedes agregar más filtros, como:

find /some/where -mtime +3d -print0 | grep -ziE '\.(jpg|png|gif)$' | xargs -0 rm

y combinaciones poderosas similares (más).

    
respondido por el jm666 13.06.2011 - 17:44
2

Para responder a la pregunta formulada en su comentario: puede unir criterios separados solo enumerándolos, uno después del otro. Si lo prefiere, puede usar -a o -and entre ellos, pero estos son redundantes. También puede usar -o o -or para el operador OR, y puede usar paréntesis, que se deben citar para protegerlos del shell, como en \( y \) para agrupar.

Para los detalles completos, ejecute: man find

    
respondido por el Harald Hanche-Olsen 13.06.2011 - 16:28
0

Se considera peligroso usar -exec rm sin las primeras ls. Probablemente debería comprobar eso primero. La verificación inversa también es una buena sugerencia para decirle si el momento es correcto.

find . -maxdepth 1 -type f -mtime -30d -exec ls -latr {} \;

O

find . -maxdepth 1 -type f -atime -30d -exec ls -latr {} \;
  1. Restrinja el resultado de su búsqueda. Asegúrese de lo que solicita explícitamente.
  2. Compare para ver si el resultado opuesto es lo que realmente se ha excluido de su comando original.
  3. Probablemente -mtime o -atime son más apropiados, pero nuevamente compare el resultado y vea si realmente es lo que necesita.
respondido por el jimx 13.06.2011 - 17:36
0

Prueba esto: find . -ctime +30 | xargs rm -r 2> /dev/null

Por alguna razón, esto ejecuta rm dos veces. Así que simplemente redirigí los errores al agujero negro /dev/null

Disfruta.

    
respondido por el iGbanam 16.06.2011 - 02:39

Lea otras preguntas en las etiquetas