Buscar con find y excluir archivos (por su extensión) de los resultados

Yo como muchos saben uso KDE, no obstante aunque me encanta la comodidad y el confort que KDE me brinda (por ser extremadamente completo), no uso ni remotamente todas las opciones que trae, inclusive ni algunas básicas.

Cuando cualquiera de ustedes desea buscar en X carpeta todos los archivos .jpg o simplemente los que en su nombre contengan “boda”, usan el buscador del sistema, pues yo no :)

No es que yo sea más geek, nerd o freak que otros, yo simplemente uso find (en terminal obvio) pues lo encuentro increíblemente más productivo, me es más simple para mí buscar con find en una terminal que tenga abierta (usando Yakuake) que tener que abrir el buscador del sistema.

Pues bien, hace no mucho quise buscar todos los archivos cuyo nombre contenga “collection“, pero yo NO quería ver los archivos .gif, ¿cómo lograr algo así? … ¿cómo decirle a find que no me muestre los .gif aún cuando su nombre contenga “collection”?

Lo primero que se me ocurrió es algo tan simple como:

find $HOME -iname *collection* | grep -v .gif

 Esto buscaría con find todos los archivos que tengan “collection” en su nombre, pero usando grep me aseguraba que en la terminal solo se me muestre lo DIFERENTE a “.gif” y… sí, funciona de maravillas :D

Pero en realidad no hace falta usar dos comandos (find + grep) para lograr esto, con find solo nos es suficiente:

find $HOME -iname *collection* -not \( -iname "*\.gif" \)

Y listo… pero acá no acaba el post :)

¿Y si queremos borrar esos archivos que se mostraron?

Para ello solo debemos agregar el parámetro -delete en la línea, o sea:

find $HOME -iname *collection* -not \( -iname "*\.gif" \) -delete

¿Y si queremos solamente cambiar los permisos a 755?

Para ello usaremos el -exec de find:

find $HOME -iname *collection* -not \( -iname "*\.gif" \) -exec chmod 755 {} \;

Y listo :)
Nada, que espero les resulte de interés…