Skip to main content

Borrar recursivamente

Resulta que esto ya van varias veces que lo he llegado a necesitar y hoy también 😛 y pues nada, que después de batallar un poco volví a encontrar el comando correcto para poder eliminar de forma recursiva archivos en Gnu/Linux 🙂

Básicamente es usar el comando find 🙂

Si quisieramos encontrar todos los archivos .odt de forma recursiva dentro de un directorio la orden sería la siguiente:

hbautista@soporte:~$ find documentos/2009/ -type f -name «*.odt»
documentos/2009/Servicios/Solicitud_de_Servicio.odt
documentos/2009/Justificantes/Faltas_19Feb09.odt
documentos/2009/Informe_Comision_Selva.odt
hbautista@soporte:~$

Como ven dentro de ese directorio no hay muchos archivos, pero imaginen que por alguna extraña razón se encuentran con un disco duro externo en donde se crean un monton de archivos Thumbs.db

hbautista@soporte:~$ find /media/Mastodonte/ -type f -name «*.db»
/media/Mastodonte/dad/Users/CHILO/AppData/Local/IconCache.db
/media/Mastodonte/dad/Users/CHILO/AppData/Local/Microsoft/Windows/Explorer/thumbcache_1024.db
/media/Mastodonte/dad/Users/CHILO/AppData/Local/Microsoft/Windows/Explorer/thumbcache_256.db
.
.
.
/media/Mastodonte/info/Imagenes/Thumbs.db
/media/Mastodonte/info/Imagenes/Wallpaper/Thumbs.db
/media/Mastodonte/info/Imagenes/Wolverine/Thumbs.db
/media/Mastodonte/info/Imagenes/x-men/Thumbs.db
hbautista@soporte:~$

Y pues la verdad en mi caso me desespera que se creen tantos archivos ocupando espacio que puede ser valioso 😉

La forma correcta de eliminar de forma segura y recursiva TODOS esos archivos sería añadir un parámetro más a la orden anterior, quedando de la siguiente manera:

hbautista@soporte:~$ find /media/Mastodonte/ -type f -name «Thumbs.db» -exec rm {} \;

Aunque igual y se puede resumir a lo siguiente:

hbautista@soporte:~$ find /media/Mastodonte/ -name «Thumbs.db» -exec rm {} \;

Y con eso logramos nuestro objetivo 🙂

3 comentarios en “Borrar recursivamente”

  1. El find de GNU (que es el que tiene cualquier Linux) tiene el operador -delete. Usar ese en lugar del -exec rm {} \; no solo es más sencillo de leer 😉 es más rápido, por que evita el par de llamadas fork/exec para cada archivo.

    find, por supuesto, no sirve sólo para borrar cosas. Ejemplo sencillo: ¿En cual de mis archivos java se usa la función blaBlaBla? Ah, pues en find src -name '*.java' -exec grep 'blaBlaBla' {} \; 🙂
    Esto va a ser muy lento, por la misma razón mencionada arriba: Está haciendo un fork/exec para cada archivo. La solución es el comando xargs. Usando esto nuestro ejemplo se convierte en find src -name '*.java' | xargs grep 'blaBlaBla'. No siempre podemos usar xargs, porque necesitamos que el comando a ejecutar sea de la forma comando argumentos archivo archivo ..., pero cuando sirve, ayuda mucho al desempeño.

    (Uff, yo sólo venía a hacer un comentario de rapidito 😀 )

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

A %d blogueros les gusta esto: