Skip to main content

a silhouette of a person's head and shoulders, used as a default avatar

Curso de Vim: Eliminar las líneas que contengan un texto en #Vim

Un pequeño tutorial del editor Vim para eliminar en un texto las líneas que contengan una cadena de texto determinado

Este es un rápido tutorial en el que veremos un caso práctico (que me ha pasado a mí mismo) para borrar todas las líneas de un texto que contengan una cadena de texto específica.

Este artículo es una nueva entrega del curso “improVIMsado” que desde hace meses vengo publicando en mi blog sobre el editor Vim y que puedes seguir en estos enlaces:

Y para aprender Vim (de la manera más inteligente) aquí tienes esta útil guía:

La cuestión es que tenía un archivo de unas 300 líneas con un texto en inglés y otro traducido en español. Las líneas en inglés comenzaban con (EN) y las líneas de texto en español comenzaban con (ES). Algo similar a esto:

(EN) Lorem ipsum dolor sit amet
(ES) consectetur adipiscing elit
(EN) sed do eiusmod tempor incididunt
(ES) ut labore et dolore magna aliqua
...

Lo que necesitaba era eliminar del texto todas las líneas que comenzaran con (EN). Asi que para esto eche mano del comando global del editor Vim.

Pincha sobre el enlace para saber más sobre el comando, pero en resumen te puedo decir que tiene el siguiente formato:

:g/patrón/comando

El comando global de Vim busca todas las líneas que contengan el patrón y realiza el comando que le pasamos.

En este caso, quiero que busque todas las líneas que comiencen con el texto (EN) y elimine la línea en cuestión. Para ello ejecutaré el siguiente comando:

:g/^(EN)/d

Diseccionemos el comando:

  • :g/ → es el comando global
  • ^(EN) → busca las líneas que comiencen (para eso es el símbolo ^) con (EN)
  • /d → es el comando que se ejecutará, que en este caso es eliminar la línea

El comando puede ser cualquiera que necesitemos, sustituir una palabra, convertir en mayúscula, etc…

Otra opción de comando, sería borrar todas las líneas que NO contengan la cadena buscada, para eso se utiliza el símbolo ! Y comando sería este:

:g!/^(ES)/d

Con o que borraría todas las líneas que NO comienzan con (ES), por lo que en mi caso eliminaría todas las que comienzan con (EN) que es lo que quiero. Sería similar a ejecutar esto:

:v/^(ES)/d

Y hasta aquí este pequeño tutorial que ha nacido de una necesidad propia y que quería compartir en el blog. ¿Te interesan estas pequeñas “perlas” breves sobre Vim?

a silhouette of a person's head and shoulders, used as a default avatar

Estrategia en GCompris – A fondo @g_compris (15)

Finalizo la serie de que inicié inspirado por una publicación de Valencia Tech en la que se realizaba un listado completo de juegos que ofrece GCompris. Para concluir cierro con la sección de «Estrategia» en GCompris, la cual complementa las actividades de juegos de la suite educativa.

Estrategia en GCompris – A fondo @g_compris (15)

Para poder tener claro lo que hacen las aplicaciones de GCompris he pensado hacer una revisión a su enorme colección de juegos y actividades, realizando una simple captura de pantalla y una breve descripción.

Ya hemos descrito la secciones de:

Y ya es hora de hablar de la actividades de la sección «Estrategia» de GCompris donde nos encontramos con miniaplicaciones pensadas para desarrollar nuestro raciocinio.

Juegos de mesa contra Tux o contra tu amigo: intenta no colocar una ficha en la casilla roja decidiendo cuantas pones antes. Juego más complicado de lo que parece.

Estrategia en GCompris – A fondo @g_compris (15)

Cuatro en raya contra Tux o contra un oponente humano: clásico y adictivo juego donde debes alinear 4 fichas de tu color.

Estrategia en GCompris – A fondo @g_compris (15)

Juego del Molino contra Tux o contra un amigo: No conocía este juego, pero según leemos en la Wikipedia: cada jugador dispone de nueve piezas, u «hombres», que se mueven en el tablero entre veinticuatro intersecciones. El objetivo del juego es dejar al oponente con menos de tres piezas o sin movimiento posible.

Estrategia en GCompris – A fondo @g_compris (15)

Tres en raya contra Tux o contra un oponente humano: clásico juego donde debes alinear 3 fichas de tu color para ganar. Elemento fundamental del clásico del cine Juegos de Guerra.

Damas contra Tux o contra un oponente humano: Otro clásico con los que afinar tus dotes estrategas.

Estrategia en GCompris – A fondo @g_compris (15)

Ajedrez contra Tux o contra un oponente humano: ¿qué se puede decir de este juego milenario?

Estrategia en GCompris – A fondo @g_compris (15)

Final de partida de ajedrez: soluciona los típicos problemas de ajedrez que suelen aparecer en los periódicos.

Colores avanzados: aprende los colores más complejos, pon a prueba tu agudeza distinguiendo matices.

Colores avanzados: aprende los colores más complejos, pon a prueba tu agudeza distinguiendo matices.

Y, con esto, queda finalizado el repaso de GCompris, una suite educativa espectacular, funcional, variada y en constante desarrollo.

a silhouette of a person's head and shoulders, used as a default avatar

El comando wc de #GNU

Veamos qué puede hacer y cómo se usa el comando wc de las herramientas coreutils del sistema GNU

Los comandos de GNU coreutils son las herramientas básicas de nuestros sistemas GNU con kernel Linux similares a las de sistemas Unix, para gestionar desde la línea de comandos el sistema y operaciones con archivos de texto.

En este caso vamos a repasar las opciones del comando wc que sirve para contar las líneas, caracteres y palabras de un archivo u archivos, para utilizarlo en nuestra consola o incorporarlo a nuestros scripts.

En muchos sitios quizás habréis leído sobre este comando que lo que hace es contar el número de líneas de un archivo (o archivos) ¿verdad? ¡Pues es falso! o al menos no es correcto del todo.

El comando cuenta los caracteres de líneas nuevas de un archivo, normalmente representado por \n, además de también contar, palabras y caracteres.

¿Y por qué esa distinción entre líneas y caracteres de nuevas líneas? Vayamos por pasos y poco a poco.

El símbolo $ delante del comando, no es parte del comando y no hay que escribirlo, esto significa que el comando es ejecutado por un usuario sin privilegios de root.

Contador de saltos de línea en un archivo

Para empezar vamos a crear un archivo (sin un salto de línea \n al final del archivo) mediante este comando:

$ echo -n "este archivo tiene 5 palabras" > archivo

Si ahora ejecutamos el comando cat para mostrar el contenido del archivo veremos lo siguiente:

$ cat archivo
este archivo tiene 5 palabras

Como he dicho el comando wc cuenta el número de líneas, el número de palabras y el número de caracteres y los saca por la salida estándar que en este caso sería mostrarlos por pantalla en ese orden junto con el nombre del archivo.

En este caso debería mostrar que el archivo tiene 1 línea, 5 palabras y 29 caracteres ¿no? Veamos qué sucede al ejecutar el comando

$ wc archivo
0 5 29 archivo

Nos dice que no tiene ninguna línea y sí 5 palabras y 29 caracteres. Sucede esto, porque hemos creado el archivo con el comando echo pero sin salto de línea final.

Veamos la diferencia, volviendo a crear el archivo con el comando echo, pero ahora de esta manera (lo que haríamos de manera normal):

$ echo "este archivo tiene 5 palabras" > archivo

A priori el archivo sería igual y si volvemos a mostrarlo con el comando cat, no veríamos ninguna diferencia, pero sí las hay si volvemos a ejecutar el comando wc anterior:

$ wc archivo
1 5 30 archivo

Ahora nuestro archivo sí tiene un salto de línea al final de la única línea que contiene y como verás también ha sumado 1 al contador de caracteres, ya que ahora ese caracter de salto de línea es tomado como tal en la cuenta.

Al editar archivos con un editor de texto, este automáticamente suele añadir esos saltos de línea al final de cada línea.

Palabras para wc

¿Y a qué se refiere una palabra cuando hablamos del comando wc? Una palabra es una secuencia de caracteres delimitadas por espacios en blanco (saltos de línea, tabuladores, etc). Veamos un ejemplo:

$ echo "¿Esto son (¡5 palabras!)?" > archivo
$ wc -w archivo
4 archivo

El contador de palabras del comando wc (más adelante veremos cómo mostrar solo las palabras de un archivo) nos dice que este archivo tiene 4 palabras, para el comando wc los signos de puntuación son irrelevantes.

Vamos a modificar esto añadiendo algunos espacios en blanco para “crear” más palabras para el comando wc:

$ echo "¿Esto son ( ¡5 palabras! ) ?" > archivo
$ wc -w archivo
7 archivo

El añadir más espacios en blanco a los espacios en blanco, no aumenta el número de palabras encontradas:

$ echo "¿Esto son (    ¡5 palabras!     )    ?" > archivo
$ wc -w archivo
7 archivo

Bueno, la introducción ha sido un poco larga, pero me parecía interesante dejar claro el concepto antes de continuar viendo más opciones del comando.

wc con varios archivos

El comando puede ser ejecutado pasándole varios archivos a la vez y mostrará las sumas de líneas, palabras y caracteres mas el nombre del archivo de cada uno de ellos y además un total con la suma de todos. Por ejemplo, en mi caso:

$ wc archivo1 archivo2 archivo3                                       
  1   5  30 archivo1
  4   8  36 archivo2
  4   8  36 archivo3
  9  21 102 total

Filtrando qué muestra el comando wc

Pero quizás no queremos que nos muestre toda esa información porque para nuestro script o nuestra necesidad solo queremos que muestre uno o varios de esos valores, para ello le podemos decir al comando wc qué valor queremos que nos muestre con estas opciones:

  • -c → muestra el valor de bytes del archivo
  • -m → muestra el valor de caracteres del archivo
  • -w → muestra el valor de palabras del archivo
  • -l → muestra el valor de líneas (ya sabes caracteres de nueva línea \n) del archivo

Los valores no son excluyentes, es decir, especificar un valor no elimina que se muestre otro y siempre se mostrarán en orden de líneas, palabras y caracteres, por ejemplo podemos utilizar cualquiera de estos comandos para mostrar los números de lineas y palabras del archivo:

$ wc -wl archivo
$ wc -w -l archivo

Mostrar el valor de la linea mas larga con wc

Otra funcionalidad interesante del comando wc es la de mostrar el valor del número de caracteres de la línea mas larga del archivo con la opción -L

Si especificamos varios archivos, mostrara el valor de la linea mas larga de cada archivo y un total que no es tal, ya que no es la suma de todos los valores, si no el valor mas grande de todos los mostrados:

$ wc -L archivo1 archivo2 archivo3                                       
  30 archivo1
  8 archivo2
  42 archivo3
  42 total

Omitir el nombre del archivo en la salida del comando wc

Al usar este comando, en la salida del resultado nos muestra el nombre del archivo, si queremos utilizar este comando en un script, quizás esa información no nos interesa, por lo que tendríamos que procesar la salida para eliminar el nombre del archivo.

Pero existe una manera para hacer que no se muestre directamente el nombre, utilizando la redirección. El comando muestra el nombre cuando es una opción del comando en la línea de comandos, pero no cuando proviene de la entrada estándar (el teclado) u otra fuente y eso es lo que haremos

Usando el redireccionamiento con <

$ wc -w < archivo
7

Usando la entrada estándar

Hasta ahora hemos visto que el comando wc de GNU cuenta el número de líneas, palabras y caracteres de un archivo o archivos, pero también puede hacerlo de las palabras que introduzcamos desde el teclado con la opción –

Usando la entrada estándar (para acabar de introducir texto usaremos la combinación de teclas Ctrl+d):

$ wc -w -
Introduciendo texto
desde el teclado
(Ctrl-d)
5 -

Y estas serian las opciones mas interesantes del comando wc de GNU. ¿Conocías el comando y su uso? ¿Te parecen interesantes estas series de artículos? Usa los comentarios para comentar sobre ello.

a silhouette of a person's head and shoulders, used as a default avatar

Minus, la red social con límite

Minus es una red social en la que el números de contenido que puedes compartir está limitado

Las redes sociales han cambiado muchas cosas en la sociedad occidental actual. Es sencillo compartir y comunicarse con personas con mismos intereses, aprender cosas nuevas, etc.

También es el sitio ideal para que trolls y haters campen a sus anchas y que se fomenten bulos, noticias falsas, discursos de odio, etc.

Todo eso es parte de la naturaleza humana, de lo mejor y de lo peor… y otra cualidad es la temporalidad de todo. Y cuando digo todo, me refiero a todo…

Como cantaba la gran Mercedes Sosa, todo cambia. Y como decía (no sé quién) lo único inmutable es el cambio.

Vivimos en un mundo finito, en el que la expansión y crecimiento es la bandera de los neliberales y eso está haciendo que acabemos con preciados recursos de nuestro planeta. Es una incongruencia y una insensatez.

Por eso la red social minus, propone una idea novedosa, solo te permite compartir 100 posts y después tu cuenta se cerrará. Esto es lo que dicen sobre su red social:

Minus es una red social finita en la que obtienes 100 publicaciones, de por vida. Si bien puede responder a una publicación con la frecuencia que desee, cada vez que agrega al feed, se resta de su total de por vida. Cuando llegue a 0 publicaciones restantes, eso es todo. Sin excepciones.

La alimentación es cronológica inversa, no algorítmica. Las marcas de tiempo de las publicaciones son vagas. Nada se monetiza. No hay me gusta ni seguidores ni notificaciones ruidosas. La única métrica visible del sitio cuenta hacia atrás, que muestra cuántas publicaciones le quedan a cada usuario.

¿Qué tan desorientador será interactuar en una plataforma que no intenta inducir un compromiso interminable en cada segundo de tu vigilia? ¿Qué dirás, o harás, cuando te liberes de la demanda infinita?

Al igual que la vida, Minus tiene límites. Pruébelo hoy y vea cómo se siente la interacción en línea en una red social diseñada por menos.

Esto más que una red social, supongo que quiere ser un experimento o una manera de reflexionar que más pronto o más tarde todo se termina.

Los servidores de nuestras redes sociales no son infinitos, todo lo que enviamos (comentarios, vídeos, fotos, etc) se almacenan en discos duros de servidores.

Mantener esos datos requiere recursos. Recursos de medios para almacenar (servidores, discos duros), de materias primas (silicio, tierras raras) para crear esos medios y de energía que alimente esos medios (alimentación eléctrica de los equipos y alimentación eléctrica de los medios que refrigeran esos equipos).

Ahora mismo estamos en una vorágine en la que creemos que todo es para siempre y nada se acaba… pero será duro despertar de este espejismo.

La crisis mundial de semiconductores quizás es una alerta de que esto no puede continuar por estos derroteros. Obsolescencia programada, publicidad para inocular la “necesidad” de volver a cambiar de móvil o tirar ese equipo todavía funcional por otro más novedoso y mejor (por tiempo limitado), la imposibilidad de reparación de equipos y mucho más…

También la red social minus, la veo como una reflexión de compartir por la red aquello más importante dejando a un lado aquello que no aporta nada.

Son 100 posts los que podremos compartir, deberemos pensar bien qué queremos decir. Se acabó la producción rápida y el consumo rápido de contenido, que es la tendencia actual de las redes sociales más modernas.

Un dedo preparado haciendo “scroll” de manera infinita y consumiendo sin reflexionar contenidos breves e intrascendentales que se perderán en el maremagnum de vídeos de gatos, retos cada vez más tontos, bromas sin gracia y bailes únicos que repiten miles y miles de personas.

Bueno, con la excusa de esta curiosa red social os he soltado todo este “rollo” que quizás pocas personas leerán. Muchas buscarán rápidamente un enlace, un titular, una imagen sobre la que pinchar y satisfacer así el ansia consumista…

Si tú lector o lectora del blog has recorrido estas líneas hasta llegar aquí, muchas gracias…

Imagen: Antolín
a silhouette of a person's head and shoulders, used as a default avatar

Actualización de Plasma Mobile de agosto de 2021

Parece ser que el desarrollo de Plasma Mobile, se va a convertir en una entrada recurrente en el blog. Desde que en abril realicé un artículo donde enumeraba la gran cantidad de aplicaciones básicas, las novedades de junio incorporando más aplicaciones y la actualización de julio, hoy sigo presentando la actualización de Plasma Mobile de agosto de 2021. Una buena noticia para todos los que soñamos con un móvil libre y funcional para nuestro día a día.

Actualización de Plasma Mobile de agosto de 2021

Para los que no lo conozcan Plasma Mobile es la alternativa libre a interfaz gráfica para smartphones de la Comunidad KDE, hablé de él hace un tiempo.

Su idea es muy simple, tras conquistar tu escritorio KDE también quiere conquistar tu teléfono móvil… aunque todavía lo tenga complicado.

Actualización de Plasma Mobile de agosto de 2021

No obstante, confiemos que de igual forma se han ido conquistando los ordenadores de sobremesa, portátiles y servidores, lleguemos un día que podamos tener libertad total en nuestros smartphones.

Y para cuando eso ocurra la Comunidad estará preparada para ello y por eso está confeccionando un catálogo más que decente de aplicaciones con tecnología adaptativa que se ajustarán a nuestras pantallas.

La actualización de agosto de Plasma Mobile viene cargado de novedades:, algunas de las cuales las resumo a continuación:

  • Shell: la interfaz básica de funcionamiento ha recibido múltiples mejoras, Aleix Pol arregló muchos problemas en KWin que afectaban al teclado virtual, mejorando en gran medida la fiabilidad de que aparezca en apantalla y cerrarlo cuando no se necesita. También reescribió el código de los ajustes rápidos del panel superior, poniendo en marcha la infraestructura que facilitará la creación de botones de ajuste rápido personalizados.
  • SpaceBar: la aplicación de Plasma Mobile para recibir y enviar SMS. Smitty van Bodegom ha arreglado el código de estado de los mensajes en Spacebar para que se muestre correctamente en todos los casos cuando el envío de un mensaje falla. Además, arregló un error común que era causado por el envío del número de teléfono a oFono en un formato que no entendía.
  • KWeather: Nicolas Fella hizo una refactorización importante de la aplicación, así como de la biblioteca de backend de la que depende. Han Young y Devin Lin cambiaron el gráfico del tiempo para utilizar los gráficos Qt Quick, solucionando los problemas de líneas demasiado gruesas que se representaban en el Pinephone.
  • KClock: Boris Petrov ha añadido una función que permite poner en bucle los temporizadores. Esto le permitirá establecer temporizadores en bucle indefinidamente para hacer tareas repetitivas, por ejemplo. Boris también ha añadido la opción de poder especificar comandos personalizados para que se ejecuten cuando un temporizador termine. Devin ha corregido los problemas de tamaño de las ventanas con alturas pequeñas, mejorando la experiencia en el modo horizontal en el Pinephone. También mejoró algunas de las animaciones en toda la aplicación.
  • Kasts: el gestor de podcast de Plasma Mobile además de recibir algunas correcciones de errores menores, ahora permite cambiar la ubicación donde se guardan los episodios de podcast descargados y las imágenes en caché. Estos archivos pueden ocupar mucho espacio en el disco, por lo que es bueno poder almacenarlos en otro lugar en sistemas con espacio limitado en la carpeta de inicio. La configuración relacionada muestra ahora el espacio de disco utilizado por los episodios y las imágenes, y permite borrar la caché de imágenes

Más información: Plasma Mobile

a silhouette of a person's head and shoulders, used as a default avatar

Actualización de septiembre del 2021 de KDE Frameworks

Encaramos ya la recta final de año y siguen las entradas recurrentes de las actualizaciones mensuales de rigor que demuestra que los desarrolladores de KDE no dejan de trabajar en sus librerías. Así que se congratulan en anunciar la actualización de septiembre del 2021 de KDE Frameworks.  Con esta se llega a la versión 5.86, un suma y sigue de compromiso y constancia que no parece que tenga un final cercano.

Actualización de septiembre del 2021 de KDE Frameworks

A pesar de que para los usuarios corrientes esta noticia sea algo confusa ya que no se trata de realzar una nueva aplicación ni de una nueva gran funcionalidad del escritorio, el desarrollo de KDE Frameworks tiene repercusiones directas en él a medio y largo plazo.

La razón de esta afirmación es que KDE Frameworks es básicamente la base de trabajo de los desarrolladores para realizar sus aplicaciones, es como el papel y las herramientas de dibujo para un artista: cuanto mejor sea el papel y mejores pinceles tenga, la creación de una artista será mejor.

Actualización de septiembre del 2021 de KDE Frameworks

De esta forma, las mejoras en KDE Frameworks facilitan el desarrollo del Software de la Comunidad KDE, haciendo que su funcionamiento, su estabilidad y su integración sea la mejor posible.

El sábado 11 de septiembre de 2021 ha sido lanzado KDE Frameworks 5.86, la nueva revisión del entorno de programación sobre el que se asienta Plasma 5, el escritorio GNU/Linux de la Comunidad KDE, y las aplicaciones que se crean con para él.

Hay que recordar que los desarrolladores de KDE decidieron lanzar actualizaciones mensuales de este proyecto y lo están cumpliendo con puntualmente. La idea es ofrecer pocas pero consolidadas novedades, a la vez que se mantiene el proyecto evolucionando y siempre adaptándose al vertiginoso mundo del Software Libre.

Una gran noticia para la Comunidad KDE que demuestra la evolución continua del proyecto que continua ganando prestigio en el mundo de los entornos de trabajo Libres.

Más información: KDE

¿Qué es KDE Frameworks?

Para los que no lo sepan, KDE Frameworks añade más de 70 librerías a Qt que proporcionan una gran variedad de funcionalidades necesarias y comunes, precisadas por los desarrolladores, testeadas por aplicaciones especí­ficas y publicadas bajo licencias flexibles. Como he comentado, este entorno de programación es la base para el desarrollo tanto de las nuevas aplicaciones KDE y del escritorio Plasma 5.

Actualización de agosto del 2021 de KDE Frameworks

Aquí podéis encontrar un listado con todos estos frameworks y la serie de artículos que dedico a KDE Frameworks en el blog,

Recuerda que puedes ver una introducción a Frameworks 5.0 en su anuncio de lanzamiento.

a silhouette of a person's head and shoulders, used as a default avatar

Quinto episodio de KDE Express «Fin de Vacaciones»

Sigo con la promoción del nuevo podcast de la Asociación sin ánimo de lucro KDE España, así que bienvenidos al quinto episodio de KDE Express llamado «Fin de Vacaciones». Escuchemos lo que nos tienen que contar.

Quinto episodio de KDE Express «Fin de Vacaciones»

Comenté hace poco que había nacido KDE Express, un audio con noticias y la actualidad de la Comunidad KDE y del Software Libre con un formato breve (menos de 30 minutos) que complementa los que ya genera la Comunidad de KDE España de forma casi mensual con sus ya veteranos Vídeo-Podcast que podéis encontrar en Archive.org, Youtube, Ivoox y Spotify)

Quinto episodio de KDE Express "Fin de Vacaciones"

Seguimos pues con sus episodios cortitos y, en esta ocasión, cargado de noticias y novedades de la Comunidad KDE, llegando al número 5 de su primera temporada que, en palabras del equipo de KDE Express, se introduce de la siguiente forma:

«

«Han vuelto, José y Brais estaban de merecidas vacaciones pero ya los tenemos por aquí para retomar una ronda de noticias de 20 minutos para empezar el curso poniéndonos al día. Hablaremos de Krita, PeerTube, Steam Deck, Gear, Kasts, puestos de trabajo, entre otras tantas cosas.

A mi me sigue gustando mucho, es rápido, directo al grano y muy dinámico, con lo cual es ideal para aquellos que les guste tener su pincelada de Kdeera en su podcaster. Evidentemente, no se profundiza en temas aunque si se da una visión muy personal de los mismos.

Así que sigo dando mi más sincera enhorabuena a José Picon, Brais Arias y a David Marzal por el esfuerzo y dedicación… y aprovecho para comentar que si alguien está interesado en colaborar (bien sea para iniciarse o bien sea porque cree que puede aportar alguna cosa) no tiene más que ponerse en contacto con ellos enviando un mail a esta dirección kde_express@kde-espana.org.

Por cierto, también podéis encontrarlos en Telegram: https://t.me/KDEexpress

a silhouette of a person's head and shoulders, used as a default avatar

El comando find de #GNU

El comando find del sistema GNU nos servirá para buscar archivos o directorios en nuestros sistemas GNU/Linux

Aunque seamos personas organizadas (no es mi caso) a veces simplemente no encontramos en nuestros sistemas un archivo que recordamos que debería estar en alguna carpeta de nuestro disco duro.

En nuestro entorno de escritorio, quizás existan indexadores de archivos que de manera gráfica nos ayudarán a encontrarlos rápidamente.

Pero si nuestro entorno es la terminal y la línea de comandos, también tendremos herramientas para encontrar un archivo (o carpeta) del que recordamos su nombre, parte de su nombre, que está en una carpeta y lo hemos modificado hace poco, etc.

Esa herramientas en sistemas GNU con kernel Linux son las formadas por findutils de GNU que las componen varias herramientas: find, locate, updatedb, xargs

En este artículo vamos a ver algunas de las opciones que nos ofrece el comando find. Que realiza una búsqueda en un árbol de directorios para encontrar un archivo o grupo de archivos.

Recorre ese árbol de directorios y muestra todas las ocurrencias encontradas de acuerdo a las especificaciones que le haya pasado el usuario. El comando find tiene unas funcionalidades muy potentes de búsqueda.

Este artículo es una adaptación del artículo escrito por Seth Kenlon para la web opensource.com publicado bajo licencia CC-by-sa.

Para este artículo vamos a suponer que tenemos en nuestro /home un directorio llamado Documentos y que dentro, entre otros muchos archivos y carpetas hay 4 archivos llamados: Archivo, archivo, archivoaux.txt y archivo.xml

Encontrar un archivo por el nombre

Puedes localizar un archivo por su nombre de archivo buscando por el nombre completo sin nos acordamos o por una parte del nombre utilizando expresiones regulares.

El comando find necesita la ruta del directorio en el que quieres buscar, las opciones de por qué atributo lo estás buscando (por ejemplo -name buscará por el nombre teniendo en cuenta mayúsculas y minúsculas) y la cadena de búsqueda.

De manera predeterminada, el comando find buscará un nombre de archivo que es exactamente la cadena especificada entre comillas a menos que utilices expresiones regulares.

Vamos a realizar una búsqueda básica de un archivo llamado “archivo” y queremos que busque en nuestro /home/Documentos que también se puede referirse a él como ~/Documentos. Es decir ~ sería similar a /home/tu_usuario/Documentos

Al especificar un $ delante del comando, esto significa que el comando es ejecutado por un usuario sin privilegios de root.

$ find ~/Documentos -name "archivo"
/home/victorhck/Documentos/archivo

Como véis solo encuentra el archivo que coincide con el nombre teniendo en cuenta las mayúsculas y las minúsculas. Es decir encuentra “archivo” pero no “Archivo”.

Para no tener en cuenta las mayúsculas y minúsculas en el nombre utilizaremos la opción -iname (insensitive name)

$ find ~/Documentos -iname "archivo"
/home/victorhck/Documentos/archivo
/home/victorhck/Documentos/Archivo

Usando comodines

Pero quizás nos acordamos sólo de parte del nombre, para eso se utilizan los comodines, para que sea reemplazado esa parte del nombre por cualquier letra.

El asterisco * reemplaza cualquier número de caracteres. Un signo de cierre de interrogación reemplaza a un único caracter.

$ find ~/Documentos -iname "archivo*"
/home/victorhck/Documentos/archivo
/home/victorhck/Documentos/Archivo
/home/victorhck/Documentos/archivo.xml
/home/victorhck/Documentos/archivoaux.txt
$ find ~/Documentos -iname "archivo*.???"
/home/victorhck/Documentos/archivo.xml
/home/victorhck/Documentos/archivoaux.txt

Encontrar un archivo modificado en la última semana

Los archivos en los sistemas GNU y Unix almacenan tres “fechas” importantes:

  • La fecha de acceso. Cuando se leyó el archivo por última vez (atime)
  • La fecha de cambio. Cuando se cambió algún atributo (ctime)
  • La fecha de modificación. Cuando se modificó el contenido del archivo (mtime)

Para buscar un archivo que fue modificado en la semana pasada, utiliza la opción -mtime junto con un número (negativo) de días del pasado:

$ find ~/Documentos mtime -7
/home/victorhck/Documentos/archivo
/home/victorhck/Documentos/Archivo
/home/victorhck/Documentos/archivo.xml
/home/victorhck/Documentos/archivoaux.txt

O también podemos combinar ciertas opciones de -mtime para encontrar un archivo modificado dentro de un rango de días.

Podemos buscar un archivo modificado hace un día (indicado con un signo positivo) pero no más de siete días atrás (con un símbolo negativo). Este sería un ejemplo:

$ find ~ -mtime +1 -mtime -7

Buscando por tipo de archivo

Es común optimizar y restringir los resultados de la búsqueda especificando el tipo de archivo que estás buscando. No deberías utilizar esta opción si no estás muy seguro de qué estás buscando.

Pero si sabes que es un archivo, o un directorio, puedes especificar el tipo y así restringir los resultados con la opción –type. Los tipos de búsqueda más comunes son (aunque hay más):

  • d → para directorios
  • f → para archivos
  • l → para enlaces simbólicos

Aquí tienes un ejemplo para buscar dentro de nuestro /home las carpetas que se comience su nombre con Doc:

$ find ~ -type d -name "Doc*"  

Y si queremos que no distinga entre mayúsculas y minúsculas utilizaríamos la opción -iname en vez de -name como hemos visto anteriormente.

Ajustando el alcance del comando

El comando find de manera predeterminada busca de manera recursiva, esto significa que realiza la búsqueda dentro de la ruta especificada, y dentro de los directorios de esa ruta, y dentro de los directorios de los directorios de esa ruta, etc.

Esto puede convertirse en contraproducente según las rutas donde busquemos. Podemos utilizar la opción –maxdepth para decirle al comando en cuantos niveles de sub carpetas queremos queremos que entre.

Por ejemplo vamos a buscar todos los archivos .pdf que tengo en mi equipo y contaremos las ocurrencias pasándole lo encontrado por find al comando wc -l que contará las líneas que haya encontrado find

$ find ~ -name "*pdf" | wc -l 
298

Esto ha buscado todos los archivos PDF en todo mi /home. Ahora ejecutaremos lo mismo, pero diciéndole que solo entre a buscar en dos niveles de subcarpetas. Lo que reduce el número de archivos encontrados.

$ find ~ -maxdepth 2 -name "*pdf" | wc -l
42

También existe la opción de indicar el número mínimo de niveles de subcarpetas en los que debe buscar el comando find con la opción –mindepth

Más opciones de búsqueda del comando find

Pero además de todo lo visto, este comando tiene muchas más opciones a la hora de realizar búsquedas, veremos algunas:

  • -perm → realizará una búsqueda de archivos que coincidan con unos permisos determinados
  • -empty → una opción muy interesante es buscar archivo o carpetas que estén vacías
  • -user → podremos buscar archivos que pertenezcan a un usuario determinado del sistema.
  • -size → otra opción interesante es buscar archivos o carpetas que sean de un tamaño especificado.
  • -exec <comando> → añadiendo esta opción podremos ejecutar el <comando> que queramos a los resultados de la búsqueda efectuada (podremos buscar con grep, cambiarles permisos con chmod, borrarlos con rm, etc)

Y esto sería un uso básico explicado del comando find. Además de las fuentes habituales de información sobre un comando con las páginas man o info te recomiendo un artículo del gran David aka “ochobitshacenunbyte”:

Un verdadero hacker de GNU/Linux que en su artículo muestran muchos ejemplos prácticos. No como yo, que soy un simple aprendiz!! 🙂

a silhouette of a person's head and shoulders, used as a default avatar

Nueva charla y taller «Install Party» en Los Anguijes (Albacete) organizada por Asociació Emanciació Comunitaria

Me congratula promocionar una nueva charla y taller «Install Party» en en Los Anguijes (Albacete) organizada por Asociació Emanciació Comunitaria, con la colaboración de la Asociación GNU/Linux València. Se trata de una nueva edición de la que ya realizaron el pasado 21 de agosto y realizarán el domingo 19 de septiembre. Más información, sigue leyendo.

Nueva charla y taller «Install Party» en Los Anguijes (Albacete) organizada por Asociació Emanciació Comunitaria

Nueva charla y taller «Install Party» en Los Anguijes (Albacete) organizada por Asociació Emanciació Comunitaria
Logo Emanciació Comunitaria

Parece ser que poco a poco vuelve la normalidad en cuanto a actividades presenciales de la comunidad GNU/Linux. Eso si, con todas las medidas de seguridad que sean necesarias.

Es por ello que me complace compartir con vosotros un nuevo evento del grupo de personas que en València está impulsado el Software Libre y temas relacionados con el empoderamiento de la sociedad que lleva por nombre Asociació Emanciació Comunitaria, que podéis encontrar en su Grupo y Canal de Telegram.

Charla y taller «Install Party» en Bolbait (València) organizado por Asociación GNU/Linux València
Logo GNU/Linux València

Es por ello que os invito a la nueva charla y taller «Install Party» en Los Anguijes (Albacete) que se va a realizar el próximo sábado 2 de octubre que vuelve a tener como lema «Para una sociedad libre necesitamos una tecnología que no esté controlada por el poder».

Nueva charla y taller «Install Party» en Bolbait (València) organizada por Asociació Emanciació Comunitaria

De esta forma se han organizado varias actividades:

  • 10:00 h: Charla sobre el Software Libre, donde se explicará la importancia del software libre en una comunidad con democracia real
  • Comida comunitaria, preferiblemente vegana.
  • 17:00 h: Taller Install Party, al que podréis LLEVAR VUESTRO EQUIPO y os ayudaremos a instalar un Sistema Operativo COMPLETAMENTE LIBRE!! · ◡ · además de otras herramientas. que nos permiten independencia de aquellas controladas por instituciones, empresas y estados.

Resumiendo, la información básica es:

  • Fecha: sábado, 19 de agosto de 2021
  • Horario: A partir de las 10:00
  • Lugar: Los Anguijes (Albacete)
  • ¿Registro necesario? Si, plazas limitadas. Reserva en el siguiente teléfono 616214149.

Si podéis asistir no os lo perdáis, seguro que no quedáis decepcionados.

a silhouette of a person's head and shoulders, used as a default avatar

Fiesta 25 aniversario KDE de Barcelona

Se nos viene gran celebración. De momento, os invito a la fiesta 25 aniversario KDE de Barcelona que se va a celebrar el sábado 16 de octubre, por eso de que sea en fin de semana y facilitar la asistencia.

Fiesta 25 aniversario KDE de Barcelona

El tiempo pasa rápido y veloz y ya tenemos entre nosotros otro gran aniversario de la Comunidad KDE. Parece que fue ayer cuando celebramos el 20 aniversario del proyecto y realizamos todo tipo de eventos.

En esta ocasión vamos a celebrar el 25 aniversario del proyecto KDE, el cual llega a este nada despreciable número el próximo 24 de octubre.

Para ello ya se están organizando diversos eventos entre los que se encuentra la Fiesta 25 Aniversario KDE de Barcelona, un encuentro informal que están organizando en la Ciudad Condal diversos miembros de KDE España para el próximo 16 de octubre en un lugar todavía por determinar.

Esta fiesta en realidad es una más de las que se están organizando en el mundo. Os invito tanto a organizar una en vuestra ciudad como en participar en las que os pille cerca.

Más información: KDE Community Wiki

Nacimiento del proyecto KDE

En la mesa que podemos ver en la imagen inferior Matthias Ettrich y Martin Konold hablaron sobre la creación de un proyecto que iba a ser parte fundamental del Software Libre y de la vida de cientos de desarrolladores.

Fiesta 25 aniversario KDE de Barcelona

Un poco más tarde, Mattias redactó y envió un 14 de octubre de 1996 el correo electrónico que a anunciaba el nacimiento de KDE y pidiendo desarrolladores que se involucraran en él. Seguidamente, creó la primera lista de correo del Proyecto KDE, que fue la principal vía de comunicación de los desarrolladores durante un tiempo.

Desde entonces ha llovido mucho. Y KDE ha pasado ser «The Kool Desktop Environment (KDE)» a ser una Comunidad donde tienen cabida todo tipo de personas con todo tipo de talentos, y no todos necesariamente ligados con la programación.