Eliminar extensión de archivo usando Bash

Muhammad Husnain 30 enero 2023
  1. Use el método cut para eliminar la extensión de archivo en Bash
  2. Problemas al eliminar la extensión de archivo en Bash
  3. Eliminar la extensión de archivo usando el comando basename en Bash
Eliminar extensión de archivo usando Bash

Este tutorial analiza el método para cortar y mostrar campos específicos de un archivo usando el script bash a través del comando cut y los comandos bash nombre base. También veremos su uso en conjunto con las tuberías. Luego, veremos algunos problemas que pueden surgir al cortar las extensiones de los nombres de archivo.

También veremos varios ejemplos ilustrativos de recortar las extensiones de archivo de un nombre de archivo y mostrar solo la versión derivada de ese nombre de archivo.

Use el método cut para eliminar la extensión de archivo en Bash

El método cut se utiliza para recortar ciertas secciones de un archivo de cada línea. Este comando toma un nombre de archivo y una opción (obligatorio) como argumentos y muestra los resultados en la consola estándar. También podemos usarlo para eliminar extensiones de nombre de archivo. Por este motivo, se utiliza la opción -f junto con el nombre del archivo. Una breve descripción de algunas de las opciones disponibles es la siguiente.

  • -b (Bytes): Esta opción recorta porciones de texto de todas las líneas después de un número específico de bytes.
  • -c (Columna): Se usa para cortar columnas específicas o un rango de columnas del archivo y mostrar el resto en consol.
  • -f (Campo): Una colección de símbolos entre dos símbolos delimitadores (excepto el primero) se dice que es un campo. Para cada línea del archivo, -f solo muestra campos o partes de la línea mencionada usando números de campo enteros. El tabulador se considera un delimitador por defecto. Sin embargo, podemos usar la bandera -d para definir cualquier símbolo delimitador definido por el usuario. La sinopsis del comando cut con las opciones -f y d es la siguiente.
$ cut -f (comma separated field numbers) -d "delimiting symbol" filename.txt 

También hay otras opciones disponibles como -complemento, -salida-delimitador y -versión. Puede tomar ayuda usando cut --help para obtener más información.

Ejemplo 1: Eliminación de extensiones del contenido

Considere el siguiente ejemplo para obtener más información sobre -f y -d. Suponga que webpages.txt contiene nombres de diferentes páginas web HTML para un sitio web en particular, cada una en una nueva línea. Veamos el contenido de webpages.txt ejecutando el comando cat en la terminal: -

$ cat webpages.txt
index.html
contact_us.html
login.html
dashboard.html

Seguir el script bash cortará las extensiones de todos los nombres de archivo dentro de webpages.txt y mostrará la salida a la consola estándar. Supongamos que hemos creado un archivo de script de shell llamado script y escribimos el siguiente código en él: -

#!/bin/sh
#script file
file=webpages.txt
cut -f 1 -d '.' $file

Aquí, 1 delante de -f se usa para mantener solo el primer campo, y . en las opciones -d indica que los campos se separarán mediante el . símbolo. Por lo tanto, el script mantiene todo el texto en cada línea de webpages.txt antes del primer . encuentro. Echemos un vistazo a la salida.

Producción :

index
contact_us
login
dashboard

Aquí, si establecemos el número de campo en 2, solo se imprimirá un segundo campo (es decir, HTML) en la pantalla para cada línea.

Ejemplo 2: Eliminación de la extensión de un nombre de archivo almacenado en una variable mediante canalización y visualización en la consola

Suponga que desea eliminar la extensión de un nombre de archivo almacenado en una variable. El siguiente fragmento de código hará eso: -

file=webpages.txt
echo "$file" | cut -f 1 -d '.'

Producción :

webpages

El código anterior canaliza el nombre del archivo almacenado en la variable file al comando de corte, que conserva solo el primer campo del texto.

Ejemplo 3: Eliminación de la extensión de un nombre de archivo almacenado en una variable mediante canalización y asignación a otra variable

file=webpages.txt
trimmed=$(echo "$filename" | cut -f 1 -d '.')
echo "$trimmed"

Producción

webpages

El código anterior utiliza el método de sustitución de comandos para sustituir la salida del comando en el lugar del comando. Por lo tanto, trimmed se asigna cualquiera que sea el lado derecho de las salidas de asignación.

Problemas al eliminar la extensión de archivo en Bash

Cuando un nombre de archivo contiene el propio carácter delimitador en el nombre del archivo, la formulación anterior solo devolverá texto antes del primer encuentro del carácter delimitador. Podemos resolver este problema cortando el nombre al revés.

Echemos un vistazo al siguiente código.

file=abcd.efg.hmtl
trimmed=$(echo "$filename" | cut -f 2- -d '.')
echo "$trimmed"

Producción :

abcd

En el código anterior, la variable file tiene un punto más en el valor asignado. La salida contendrá todo el texto en el primer campo, que termina en el encuentro del primer punto.

Solución: podemos revertir el contenido de file antes de canalizarlo al comando cut. Después de eso, el comando cut conservará todos los campos excepto el primero del texto invertido. Ahora, debe invertirse nuevamente para obtener la respuesta final.

file=abcd.efg.html
trimmed=$(echo "$file" | rev | cut -f 2- -d '.' | rev)
echo "$trimmed"

Producción :

abcd.efg.html

Tenga en cuenta el cambio en el valor de las opciones f. La opción -f 2- se utiliza para retener todos los campos con un valor de posición igual o superior a dos.

Eliminar la extensión de archivo usando el comando basename en Bash

Si conoce el nombre de la extensión, puede usar el comando nombre base para eliminar la extensión del nombre del archivo.

file=abcd.abc.html
trimmed=$(basename $file .html)
echo "$trimmed"

Producción

abcd.abc

El primer argumento de la línea de comandos del comando basename es el nombre de la variable, y el nombre de la extensión es el segundo argumento. El comando basename escanea el texto e imprime todo antes del primer encuentro del nombre de la extensión (.html en nuestro caso).

Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn

Artículo relacionado - Bash File