Eliminar extensión de archivo usando Bash
-
Use el método
cut
para eliminar la extensión de archivo en Bash - Problemas al eliminar la extensión de archivo en Bash
-
Eliminar la extensión de archivo usando el comando
basename
en 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. Eltabulador
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 comandocut
con las opciones-f
yd
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).
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