Uso del comando Linux Basename en Bash Scripts

El comando basename en Linux imprime el componente final en una ruta de archivo. Esto es particularmente útil en bash scripts en los que desea extraer el nombre del archivo de la ruta larga del archivo.

Déjame mostrártelo con algunos ejemplos.

Comando de nombre base

El comando basename tiene dos tipos de sintaxis. El primero implica un sufijo:

basename PATH [suffix]

El segundo le permite agregar opciones:

basename OPTION PATH

No puede combinar las opciones con sufijo. No se confunda todavía. Sigue los ejemplos y entonces entenderás lo que quiero decir.

El uso del comando basename con una ruta de archivo dará el nombre del archivo:

basename /home/user/data/filename.txt
filename.txt

El comando basename es bastante estúpido en realidad. Realmente no reconoce la ruta del archivo. Simplemente busca las barras inclinadas (/) e imprime lo que sea que esté después de la última barra inclinada.

Para examplesi ejecuto lo anterior example al eliminar el nombre del archivo, esto es lo que producirá.

basename /home/user/data
data

Eliminar extensión de archivo con sufijo

El uso primario de la bash El comando consiste en extraer el nombre del archivo de la ruta del archivo. También puede eliminar la extensión del archivo mientras extrae el nombre del archivo.

Simplemente mencione lo que desea eliminar del final de la salida. Entonces, digamos que desea eliminar el .txt de filename.txt. Simplemente agréguelo al final del comando basename:

basename /home/user/data/filename.txt .txt
filename

También puede usar la opción -s para el sufijo:

basename -s .txt /home/user/data/filename.txt
filename

El sufijo se elimina del final del componente final de la entrada. Realmente no se da cuenta de la extensión del archivo. Si proporciona txt (sin el punto) en lugar de .txt, obtendrá ‘nombre de archivo’. (con el punto al final).

Además, si proporciona un sufijo que no está al final del componente, la salida permanece como si no hubiera sufijo.

basename /home/user/data/filename.txt name
filename.txt

Usando el nombre base con múltiples rutas

con la opción -apuede utilizar varias rutas simultáneamente.

basename -a /home/user/data/filename1.txt /home/user/data/filename2.txt
filename1.txt
filename2.txt

Puedes usar la opción de sufijo -s con -a pero con algunas limitaciones. Solo puede proporcionar un sufijo para todas las rutas de archivo.

basename -as .txt /home/user/data/filename1.txt /home/user/data/filename2.txt
filename1
filename2

No puede asignar suficiencias individuales. No funcionará.

También puede separar la salida con NULL en lugar de la nueva línea con -z opción.

Usando el nombre base en bash texto

Mostré algunos ejemplos del comando basename. Veamos un par de ejemplos de nombre base en bash guiones.

Suponga que tiene una variable de ruta de archivo y desea almacenar el nombre de archivo de la ruta en una variable. Esto podría ser un script simple:

pathname="/home/dir/data/filename"

result=$(basename "$pathname")

echo $result

Otro example es donde desea cambiar el nombre de las extensiones de archivo. Por supuesto, puede usar el comando de cambio de nombre para cambiar el nombre de los archivos por lotes, pero esto es solo una example.

Entonces, escribí este script de muestra con el propósito de reemplazar las extensiones de archivo:

for file in *$1; do
if [ -f $file ]; then
 mv $file `basename $file .$1`.$2
fi
done

¿Notaste que puse un cheque si es un archivo o no en bash script para que no cambie un directorio coincidente?

Puede usar el script anterior de esta manera:

./myscript.sh html htm

Y cambiará el nombre de todos los archivos en el directorio actual con html al final a htm.

Estos fueron solo algunos ejemplos. Puede usarlo según sus requisitos.

El comando basename se complementa con el comando dirname. A diferencia de basename, el comando dirname imprime toda la ruta excepto el último componente.

Espero que les haya gustado este tutorial. Como siempre, siéntase libre de hacer preguntas o brindar sugerencias en la sección de comentarios.

Related Posts