jueves, 25 de agosto de 2011

Borrando imágenes no usadas en un proyecto Rails

Para acabar el rediseño de un proyecto, estoy en la fase final de limpieza de código y me he encontrado que habían muchísimas imágenes antiguas que ya no se utilizan

En lugar de ir buscando una por una si se usaba, que me iba a llevar demasiado tiempo, he hecho un script en ruby que busca las imágenes no usadas y las borra de subversión:


images = Dir.glob('public/images/*')

images.each do |image|
  unless File.directory?(image)
    puts "Checking #{image}..."
    if IO.popen("ack-grep -1 -G '(app|public)' --ruby --html --css #{File.basename(image)}").eof?
      IO.popen("svn delete #{image}")
      puts " Deleted"
    end
  end
end

Es tan simple como buscar todas las imágenes del directorio images y aplicar sobre cada una de ellas un ack-grep que me busca en ficheros de ruby (.rb, .erb), html y css de los directorios app y public. El párametro -1 hace que al encontrar el primer resultado deje de buscar, con lo que conseguimos que vaya un poco más rápido.

Luego, sobre cada una de las imágenes no usadas hace un svn delete y ya solo nos queda revisar la lista de borrados para asegurarnos de todo ha ido bien y un commit al repo.

La modificación para que busque tambien en subdirectorios de images sería  usar 'public/images/**' como parametro en Dir.glob y igual de simple sería cambiarlo para que use git, cambiando la llamada del segundo IO.popen

Pues nada, aquí dejo el gist con el script para quien le pueda ser de utilidad.