Manipulando archivos con “find”

El comando find es una bendición para los usuarios de Unix/Linux que trabajan con muchos archivos. En mi caso particular, estar editando cientos de scripts -y toda clase de archivos- con mi editor favorito GEdit, me deja un lamentable basurero de archivos demporales. Un ejemplo práctico:

-rw-r--r-- 1 linnk linnk 2.9K 2009-04-13 02:22 put_phpftp
-rw-r--r-- 1 linnk linnk 2.9K 2009-04-13 02:22 put_phpftp~
-rw-r--r-- 1 linnk linnk 1.9K 2009-04-12 22:40 README.txt
-rwxr-xr-x 1 linnk linnk 2.4K 2009-04-13 03:47 remove_phpftp
-rw-r--r-- 1 linnk linnk 2.4K 2009-04-13 03:47 remove_phpftp~
-rwxr-xr-x 1 linnk linnk 7.4K 2009-04-12 22:40 svn2web

En este caso solo tengo dos archivos temporales que quedaron olvidados y que cuando quiera arrastrar este directorio a un FTP, estos archivos se subiran haciendo más basura en mi servidor.

La solución a esto la encontré con find googleando, pero admito que solo la repetía sistemáticamente. Suena ridículo porque ahora entiendo bien como funciona este comando y es muy sencillo de usar, además de poderoso. La solución:

find /home/usuario/proyecto/ -name "*~" -exec rm {} \;

El primer parametro de find es el directorio donde se va a buscar (incluyendo subdirectorios), el segundo es el parametro -name el cual filtra por nombre según "*~" (cualquier nombre que termine con ~). El siguiente parametro es -exec que ejectuará el comando rm {} donde {} es el archivo encontrado por find y termina el comando con \;

Para entender bien como funciona, si quitamos la parte desde -exec, lo que hará listarnos únicamente los archivos temporales. De esta forma comprendemos que find puede ejectuar comandos por cada archivo encontrado con -exec, como en este otro ejemplo muy útil:

find /home/usuario/proyecto/ -type f | xargs grep -l 'texto_buscado' | xargs sed -i '' -e 's/texto_buscado/texto_reemplazo/g'

En este caso buscamos un texto_buscado y lo reemplazamos por texto_reemplazo en muchos archivos dentro del directorio especificado. Finalmente, las posibilidades son infinitas y no lo comprendí hasta que necesité hacer algo avanzado y me puse a jugar con el comando :P

Escribe un comentario

*
*