28 julio 2009

Linux: borrar archivos del tamaño especificado

En mi caso, no utilizo linux a diario y tampoco me paso leyendo manuales enteros. Así que cada vez que me veo en la necesidad de resolver algún problema también aprendo algo nuevo.

Necesitaba borrar todos los archivos ZIP cuyo tamaño fuera inferior a 1KB de una carpeta que contiene gran cantidad de archivos.

En linux, si no se puede de una forma siempre se podrá de otra, lo que no me pasó por la mente es que fuera tan simple como utilizar los comandos find y rm combinados, pues no recuerdo en algún momento haber visto el parámetro exec de find, aunque viendolo detenidamente es lógico que uno quiera hacer algo con el resultado de la búsqueda.

find . -name "*.zip" -size -1k -exec rm {};

NOTA: si aparece algún mensaje de error del tipo "no se ha dado el argumento requerido a la opción -exec" se soluciona colocando una diagonal invertida al punto y coma.

find . -name "*.zip" -size -1k -exec rm {}\;

Básicamente lo que indicamos al comando find es, que busque todos aquellos archivos cuyo nombre corresponda al patrón *.zip y cuyo tamaño sea menor a 1KB y luego ejecute sobre ese resultado la instrucción rm.

4 comentarios:

  1. Ál ejecutar el comando en Centos 5 envía como resultado.. find missing argument to '-exec .... hay alguna condición especial para que funcione en Centos 5 ....?
    Gracias

    ResponderBorrar
  2. Basta con colocar una diagonal invertida (back slash) antes del punto y coma.

    ResponderBorrar
  3. Hay que poner un espacio entre los corchetes y el slash para que funcione

    find . -name "*.wav" -size -8k -exec rm {} \;

    Saludos

    ResponderBorrar
  4. find . -name "*.extension" -size -tamañaoref -exec rm {} \;

    extension==> zip, wav o al extensión de los archivos que quieras.

    tamañoref==> El tamaño de referencia a borrar. -10k- será menos de diéz k.

    saludos.

    ResponderBorrar