Leer nombre de archivo sin extensión en Bash

Read Filename Without Extension Bash



Los usuarios de Linux necesitan trabajar con archivos con regularidad para muchos propósitos. A veces, los usuarios necesitan leer el nombre base del archivo solo eliminando la extensión del archivo. El nombre de archivo y la extensión se pueden separar y almacenar en diferentes variables en Linux de varias formas. El comando integrado de Bash y la expansión de parámetros de shell se pueden usar para eliminar la extensión del archivo. En este tutorial se explica cómo se puede leer el nombre de archivo sin extensión utilizando las formas mencionadas anteriormente.

Usando el comando `basename` para leer el nombre del archivo

El comando `basename` se usa para leer el nombre del archivo sin extensión desde un directorio o ruta de archivo.







Sintaxis:



nombre de baseNOMBRE[SUFIJO]

o



nombre de baseOPCION ... NOMBRE ...

Aquí, NAME puede contener el nombre del archivo o el nombre del archivo con la ruta completa. SUFFIX es opcional y contiene la parte de la extensión del archivo que el usuario desea eliminar. El comando `basename` tiene algunas opciones que se describen a continuación.





Opciones

Nombre Descripción
-a Se utiliza para pasar varios nombres de archivo con ruta o sin ruta como argumentos de comando.
-s Se utiliza para pasar la extensión como sufijo que debe eliminarse.
-Con Se utiliza para mostrar los nombres de archivos múltiples separando cada archivo con un valor nulo.
-ayuda Se utiliza para mostrar la información sobre el uso del comando `basename`.
-versión Se utiliza para mostrar la información de la versión.

Ejemplo 1: uso de NOMBRE y SUFIJO

El siguiente comando `basename` recuperará el nombre del archivo con la extensión. SUFIJO se omite en este comando. Aquí, la salida es 'Product.txt' .



$nombre de base /hogar/fahmida/código/product.txt

Si desea recuperar el nombre del archivo sin extensión, debe proporcionar la extensión del archivo como SUFIJO con el comando `basename`. Aquí, la extensión es .txt. Ejecute el siguiente comando para eliminar la extensión del archivo.

$nombre de base /hogar/fahmida/código/producto.txt .txt

Ejemplo 2: uso de la opción '-a' y NAME

En este ejemplo se muestra el uso de la opción '-a' del comando 'basename'. Aquí, dos rutas de archivo se pasan como argumentos con el comando `basename`. Cada nombre de archivo con extensión se recuperará de la ruta y se imprimirá por una nueva línea.

$nombre de base -a /hogar/fahmida/index.html/hogar/fahmida/código/emp.txt

Ejemplo 3: uso de la opción '-z' y NOMBRE

La opción '-z' se usa con el comando 'nombre base' para imprimir los nombres de archivos múltiples con un valor nulo en lugar de una nueva línea. El siguiente comando usa dos opciones juntas, '-a' y '-z'. Aquí, dos nombres de archivo, index.html y emp.txt se imprimirá sin espacios ni líneas nuevas.

$nombre de base -los /hogar/fahmida/index.html/hogar/fahmida/código/emp.txt

Ejemplo 4: uso de la opción '-s' y NOMBRE

El siguiente comando se puede utilizar como una alternativa de SUFFIX con `basename`. La extensión del archivo debe pasar con la opción '-sh' para eliminar la extensión del archivo. El siguiente ejemplo eliminará la extensión '-sh' del archivo, 'add.sh'.

$nombre de base -s.sh adición.sh

Ejemplo-5: eliminar la extensión de archivo sin SUFIJO

Si no conoce la extensión del archivo que desea eliminar del nombre del archivo, este ejemplo lo ayudará a resolver el problema. Crea un archivo llamado read_file.sh con el siguiente código para recuperar el nombre de archivo de cualquier extensión. El comando `sed` se usa en este ejemplo para eliminar cualquier tipo de extensión del nombre de archivo. Si ejecuta la secuencia de comandos, la salida será ' promedio 'Después de eliminar la extensión' py ’.

read_file.sh

#! / bin / bash
# Establecer el nombre del archivo con la ruta
nombre del archivo='/home/fahmida/code/average.py'
# Lea el nombre del archivo sin extensión usando el comando 'basname' y 'sed'
echo '$ (nombre base '$ nombre de archivo' | sed 's / (. * )..*/1/')'

Ejecute el script.

$intentoread_file.sh

Ejemplo 6: convertir la extensión de archivo de txt a docx

El nombre de archivo sin extensión necesita convertir el archivo de una extensión a otra. Este ejemplo muestra cómo puede cambiar la extensión de todos los archivos de texto (.txt) a archivos de palabras (.docx) usando el comando `basename` en el script bash. Crea un archivo llamado, convert_file.sh con el siguiente código. Aquí, se usa un bucle for-in para leer todos los archivos de texto con .TXT extensión del directorio actual. El nombre de archivo sin extensión se lee con el comando `basename` y se renombra agregando la extensión .docx en cada iteración del ciclo.

convert_file.sh

#! / bin / bash
# el bucle leerá cada archivo de texto del directorio actual
pornombre del archivoen `ls *.TXT`
hacer
# Imprime el nombre del archivo de texto antes de la conversión
echo 'Nombre de archivo antes de la conversión:$ nombre de archivo'
# Cambia la extensión del archivo txt a docx
mv -- '$ nombre de archivo' '$ (nombre de base - '$ nombre de archivo' .txt).docx '
hecho

Ejecute el script.

$intentoconvert_file.sh

Verifique que los archivos de texto estén convertidos o no usando el comando `ls`.

$ls

Ejemplo-7: leer el nombre de archivo sin extensión usando la expansión de parámetros de Shell

La expansión de parámetros de shell es otra forma de leer el nombre de archivo sin extensión en bash. Este ejemplo muestra los usos de la expansión de parámetros de shell. El siguiente comando almacenará el nombre de la ruta del archivo en la variable $ nombre del archivo .

$nombre del archivo='/var/usr/temp/myfile.tar.gz'

El siguiente comando eliminará todos los tipos de extensión de la ruta y almacenará la ruta del archivo sin extensión en la variable, $ file1 .

$archivo1='$ {nombre de archivo %%. *}'

El siguiente comando imprimirá el nombre del archivo solo desde la ruta. Aquí, la salida será ' mi archivo ’.

$echo '$ {file1 ## * /}'

Si el nombre del archivo contiene dos extensiones con dos puntos (.) Y desea leer el nombre del archivo eliminando la última extensión del archivo, entonces debe usar el siguiente comando. Ejecute el siguiente comando que almacena la ruta del archivo en la variable, $ file2 quitando la última extensión del archivo.

$archivo2='$ {nombre de archivo%. *}'

Ahora, ejecute el siguiente comando para imprimir el nombre del archivo con una extensión de punto (.). Aquí, la salida será myfile.tar.

$echo '$ {file2 ## * /}'

Conclusión

Se requiere un nombre de archivo sin extensión para varios propósitos. En este tutorial se explican algunos usos del nombre de archivo sin extensión mediante algunos ejemplos, como la conversión de archivos. Este tutorial ayudará a los usuarios interesados ​​a aprender las formas de separar el nombre y la extensión del archivo de la ruta del archivo. Aquí se explican dos formas. El usuario puede seguir cualquiera de estas formas para extraer el nombre del archivo solo de la ruta del archivo.