find + remove en Linux

Un día me vi en la necesidad de clonar un proyecto de eclipse que estaba en un repositorio versionado en SVN y pasarlo a otro repositorio nuevo. Pensé de la forma más sencilla que fue tomar el directorio del proyecto copiarlo en otra carpeta, cambiarle el nombre y subirlo al repositorio debido, suena fácil ¿no?. Pero o sorpresa,  no había contemplado que al usar SVN como versionador éste se encarga de poner una carpeta oculta llamada ".svn" con los archivos correspondientes a las versiones en las que se encuentra cada archivo de cada carpeta y cada carpeta a su ves lo cuál me ocasionaría conflictos al momento de subir el proyecto al nuevo repositorio o peor aún, dejaría los archivos y directorios apuntando al otro repositorio.

¡Imaginen el problema en el que me había metido! De repente empecé a imaginarme toda la tarde entrando a cada directorio del proyecto borrando cada una de esas carpetas .svn, -¡NO! son demasiadas carpetas. Borré ese pensamiento de mi mente y comencé a pensar en la solución de un ingeniero, ¿Que haría un ingeniero en estos casos? -Tomar lo que tiene a su alrededor, utilizar su ingenio para transformarlo y convertirlo en una herramienta que le facilite su labor.

Sí eso es lo que iba a hacer, entonces me dispuse a ver lo que tenía a mi alrededor y vaya no fue difícil dar con lo que quería. Trabajar con Linux y saber su potencial te facilita muchas cosas, así que pensé, - Ya existe una función en consola que haga lo que yo quiero.

Primero pensé en el comando rm que es para remover algún directorio que deseemos, pero me hacía falta la pieza clave que era borrar todos los directorios .svn que quería y para eso debía encontrar todos y cada uno de ellos por lo que necesitaba un comando para buscar.

El comando para buscar en Linux es find que encuentra lo que le pidas que encuentre basado en una serie de propiedades que le especifican que buscar. Ya con las piezas claves me dispuse a armar el comando completo el cuál me ayudaría a cumplir mi cometido y aquí se los presento:

Remover directorios encontrados.

find . -type d -name ".svn" -exec rm -rf {} \;

Explicación:  
Con este comando estamos pidiendo que encuentre  find todos los directorios . -type d de nombre .svn -name ".svn" y que por cada unos de los directorios encontrados ejecute el comando de remover directorio de manera recursiva y sin preguntar si deseas borrarlo -exec rm -rf {}. Las llaves son las que indican que se tiene que ejecutar el comando por cada archivo encontrado y  \; simplemente indican que se termina la instrucción que se debe ejecutar, como ven el ; debe escaparse con la \.

Problema solucionado!

Espero no se tomen muy a pecho lo que digo sobre Linux, Fedora u otra cosa en específico, lo que comento son cosas que uso porque son de mis gustos y si otras personas difieren en gustos porque les gusta Windows o Mac, otras Distros y otra cosa es completamente Válido y respetable como lo mío.

Saludos!

1 comentario

  1. Otra opcion: basada en comando duales por pipe en lnx seria

    find . -name '.svn' | xargs rm -R

    explicacion, el uso de pipe "|" te permite ejecutar dos comandos, uno basado en los resultados que te arroja el primero y procesados por el segundo.

    Es la magia de linux jejejeje, y bueno para los que tienen win o una de dos, se cambian a lnx o usen un emulador de comando linux como "Git shell"

    Sal2

    ResponderEliminar

Seguidores

Google+ Followers

MarceStarlet. Con la tecnología de Blogger.