El comando basename en Linux imprime el componente final en una ruta de archivo. Esto es particularmente útil en scripts de bash en los que desea extraer el nombre de archivo de la ruta de archivo larga.
Déjame mostrártelo con algunos ejemplos.
Comando de nombre base
El comando basename tiene dos tipos de sintaxis. El primero involucra 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 de 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. Solo busca las barras inclinadas (/) e imprime lo que sea que esté después de la última barra inclinada.
Por ejemplo, si ejecuto el ejemplo anterior eliminando el nombre del archivo, esto es lo que arrojará.
basename /home/user/data
data
Eliminar extensión de archivo con sufijo
El uso principal del comando bash es 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 determina 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 basename con múltiples rutas
Con la opción -a
, puede usar varias rutas simultáneamente.
basename -a /home/user/data/filename1.txt /home/user/data/filename2.txt
filename1.txt
filename2.txt
Puede 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.
Uso de basename en bash script
Mostré algunos ejemplos del comando basename. Veamos un par de ejemplos de nombre base en scripts bash.
Suponga que tiene una variable de ruta de archivo y desea almacenar el nombre de archivo de la ruta en una variable. Este podría ser un script simple:
pathname="/home/dir/data/filename"
result=$(basename "$pathname")
echo $result
Otro ejemplo 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 un ejemplo.
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 marqué si es un archivo o no en el script bash 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, no dude en hacer preguntas o brindar sugerencias en la sección de comentarios.