Utilizando la opción complement de cut para dar formato a un listado de archivos

📆 domingo, 28 de junio de 2026

Tengo muchos libros en formato epub. Todos están en la misma carpeta, ordenados por autor. A veces, me gustaría saber si tengo o no determinado libro y para evitar tener que encender el ordenador para comprobarlo lo que hago es mantener un listado actualizado en un archivo de texto, que me envío periódicamente por email. Así, echando un vistazo al correo desde el móvil puedo comprobarlo de forma rápida.

Podría volcar sin más el listado a un archivo de texto:

ls | cat > libros.txt

Pero el resultado no es demasiado estético. Uno de los inconvenientes es que en algunos casos tengo el mismo libro en diferentes formatos, ya que en casa, además de los kobo también tenemos un kindle paperwhite, que no admite .epub como formato. Por eso, se podría mejorar el método anterior filtrando por tipo de archivo:

ls *.epub | cat > libros.txt

Esto ya es un avance, pero se puede seguir mejorando. Por ejemplo, que en listado no figure la extensión, es decir, que en vez de Autor - Libro.epub aparezca como Autor - Li:wbro. Ahí es cuando se lía un poco la cosa. Mi primera opción fue utilizar tr para reemplazar la cadena .epub con una cadena vacía. No lo conseguí, así que probé con cut, que permite separar cadenas en un carácter concreto y seleccionar la parte con la que te quieres quedar. Mi idea era utilizar . como separador y quedarme solo con la primera parte.

ls | *.epub | cut -d. -f1 | cat > libros.txt

Y parecía funcionar hasta que al revisar el archivo de texto me di cuenta de que algunos títulos no aparecían completos, se cortaban después del nombré. El problema es que en libros tipo Rowling, J.K. - El cerdito de la navidad en el archivo aparecían como Rowling, J. Y eso es porque cut estaba separando la cadena del título cada vez que se encontraba un punto y se quedaba con la primera parte.

La solución que parecía más lógica era cortar solo por el último punto, pero eso directamente no se puede hacer, así que tras muchas vueltas llegué al siguiente comando:

ls *.epub | rev | cut -d. -f1 --complement | rev | cat > libros.txt

El primer rev le da la vuelta a la cadena de texto, que ahora comenzará por bupe. en todos los libros. Con cut cortamos por los puntos y con f1 nos quedamos con la primera parte, es decir con bupe, pero complement hace el truco definitivo ya que es como una especie de inversión de la selección. De ese modo nos quedamos con el resto de la cadena, que volvemos a su sentido original con el segundo rev. Seguro que hay otras formas de hacerlo, pero está me sirvió para conseguir mi propósito y para aprender sobre la opción complement de cut, que no conocía de nada.

Un saludo.

Puedes compartir el enlace si te gustó: Utilizando la opción complement de cut para dar formato a un listado de archivos

También puedes dejarme un mensaje:





(Esto funciona gracias a Un-static Forms)