javoaxian cambió a: javoaxian.me
Este blog se mantendrá como histórico del nuevo javoaxian.me. Por tal motivo, sólo serán creados post que harán referencia a los del nuevo blog. Si hay dudas y comentarios, favor de hacerlos en javoaxian.me.

martes, 11 de marzo de 2008

Borrar un archivo o directorio recursivamente en GNU/Linux

Existen ocasiones en las cuales deseamos borrar un archivo o un directorio que se encuentra en otro directorio y también dentro de sus subdirectorios. Un ejemplo de ésto, son los archivo .svn que usa Subversion.

Para ejemplificar lo antes mencionado pondré el siguiente ejemplo:

$ rm -rf /home/javoaxian/proyecto/.svn /home/javoaxian/proyecto/modulo1/.svn /home/javoaxian/proyecto/modulo2/.svn

Esto es muy tedioso y tardado, para lo cual, realizé este script en perl, donde le puedes indicar el archivo o directorio que deseas eliminar y en que directorio lo va a buscar.

Aquí les dejo el código del script:
#!/usr/bin/perl
# Creado por: JavoAxian
# Año: 2007

$elementoABorrar = $ARGV[0];
$directorio = $ARGV[1];

if($elementoABorrar eq "")
{
print "Ingresa el Archivo/Directorio a borrar\n";
exit(0);
}
elsif($directorio eq "")
{
print "Ingresa el Directorio donde se encuentra el Archivo/Directorio a " .
"borrar\n";
exit(0);
}

$buscar = `find $directorio -name $elementoABorrar -print`;

@directorios = split(/\n/,$buscar);

print "Iniciando la eliminación del archivo/directorio: $elementoABorrar en " .
"el directorio: $directorio\n";

for($contador=0;$contador<@directorios;$contador++)
{
$dir = $directorios[$contador];
`rm -rf "$dir"`;
print "Archivo/Directorio eliminado: $dir\n";
}

print "Finalizando la eliminación del Archivo/Directorio: $elementoABorrar\n";

Copien el código anterior y peguenlo en un archivo. Para ejemplificar le pondré al programa el nombre de borrarArchivosRecursivamente.pl.
Para usarlo, deberemos darle permisos de ejecusión y posteriormente correr el comando recibiendo como argumentos el archivo o directorio para borrar y el directorio donde se encuentra el archivo a borrar:

$ chmod 755 borrarArchivosRecursivamente.pl
$ ./borrarArchivosRecursivamente.pl .svn /home/javoaxian/proyecto

La salida sería algo como ésto:

Iniciando la eliminación del archivo/directorio: .svn en el directorio: proyecto
Archivo/Directorio eliminado: proyecto/.svn
Archivo/Directorio eliminado: proyecto/modulo2/.svn
Archivo/Directorio eliminado: proyecto/modulo1/.svn
Finalizando la eliminación del Archivo/Directorio: .svn

Espero que les pueda servir.

7 comentarios:

Anónimo dijo...

Fue muy util tu script, funciono a la perfeccion, agradezco tu colaboracion.

javoaxian dijo...

De nada, fue un placer que te haya sido de utilidad.

Fextivo dijo...

Pues muy util tambien para mí, pues me he quedado un poco alucinado que el rm no funcione recursivamente como debería hacerlo.

Un apunte a tu script: si quereis que borre en directorios que contengan espacios tienes que modificar la siguiente linea así:

`rm -rf "$dir"`;

javoaxian dijo...

Que bueno que te fue de utilidad.
Gracias por tu observación, ya agregué el cambio que sugieres al script.

Saludos!!!

Pablo Morales dijo...

gracias loco me salvast la vida, :D

anduvo muy bien

Christian dijo...

Grossoooo!!..me salvaste..muy buen script

Anónimo dijo...

Buenísimo el script