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.
Mostrando entradas con la etiqueta Shell. Mostrar todas las entradas
Mostrando entradas con la etiqueta Shell. Mostrar todas las entradas

sábado, 24 de mayo de 2008

Borrar un archivo o directorio recursivamente usando el Shell

Hace casi dos meses escribí el post Borrar un archivo o directorio recursivamente en GNU/Linux en el cual creé un programa en perl que se encarga de borrar recursivame archivos o directorios.. Pues el día de hoy simplifico ese programa en una sola línea de Shell.

Pondré como ejemplo el borrar el directorio .svn, el cual para los que no lo conocen es un directorio que se crea cuando trabajamos proyectos con Subversion (SVN) en cada uno de los directorios existentes, por lo que al momento de crear una versión para entregar necesitamos remover el directorio .svn de todos los directorios en los que se encuentra.

Para borrarlo haremos uso del comando find, dicho comando nos permite buscar archivos o directorios y con la opción -exec podremos usar el comando rm para borrar los archivos que encuentra.

La estructura para ejecutar este comando será la siguiente:

javoaxian@darthmaul:~$ find /directorio/en/donde/buscar -name archivo_o_directorio_a_buscar -exec rm \-rf '{}' \;

Aquí pongo un ejemplo para borrar el directorio .svn.

javoaxian@darthmaul:~$ find /home/javoaxian/proyectos/javoaxian -name .svn -exec rm \-rf '{}' \;

El comando anterior buscará en el directorio /home/javoaxian/proyectos/javoaxian todos los directorios .svn y los borrará. Puede que mande mensajes de error que no encontró el directorio o archivo para borrar.

Si no quieren que les mande mensajes de error, pueden ejecutar esta otra forma de usar los comandos rm y find combinados:

javoaxian@darthmaul:~$ rm -rf `find /home/javoaxian/proyectos/javoaxian -name .svn`

Para verificar que funcionó, podemos ejecutar el mismo comando find pero de la siguiente manera:

javoaxian@darthmaul:~$ find /home/javoaxian/proyectos/javoaxian -name .svn -print

Ésto busca en la ruta especificada el archivo .svn y lo muestra en pantalla. No deberá mostrar nada la salida del comando si se ejecutó correctamente.

Espero que les sea de ayuda.

viernes, 23 de mayo de 2008

Borrar los archivos que se encuentra e una lista dentro de un archivo de texto con una sóla línea de Shell

El día de hoy en el trabajo, un compañero me pregunto si recordaba una manera de borrar los archivos que se encontraban indicados en un archivo de texto usando comandos de shell. Entonces me dí a la tarea de tratar de recordar un poco y les muestro aquí la solución.

Supongamos que tenemos el archivo de texto archivos_x_borrar.txt, en dicho archivo se encuentra una lista de los archivos que deseamos borrar. Por ejemplo, el contenido de archivo_x_borrar.txt tiene lo siguiente:

archivo1.log
archivo2.log
archivo3.log
archivo4.log
archivo5.log

Como podemos observar en el ejemplo, queremos borrar 5 archivos. Resultaría fácil borrarlos directamente con el comando rm cada uno, pero si fueran 100 archivos ya sería un poco pesado.

Para borrarlos con una sola línea de shell, lo único que tenemos que ejecutar es lo siguiente:

javoaxian@sky:~$ rm `cat archivos_x_borrar.txt`

Listo, ahora si observan su directorio, ya no tendrán los archivos que se indicaban en el archivo de texto.

Saludos!!!