Tutoriales

Cómo obtener el nombre de archivo de la ruta absoluta en Linux

Cuando te doy una ruta absoluta a un archivo específico, como /etc/ssh/sshd_config Entonces, si te pido que me digas el nombre del archivo, puedes decirme fácilmente sshd_config es el archivo, y el resto son los directorios de soporte donde se encuentran los archivos.

Puede hacer lo mismo en un script y automáticamente encontrará y le dirá el nombre de archivo exacto de la ruta absoluta o completa dada.

Así que veamos cómo usar la utilidad basename y sustitución de parámetros de bash En este artículo y después de leerlo, podrá realizar los siguientes pasos en un script bash.

Extraer nombres de archivos usando la utilidad de nombre base

Cuando desee extraer un nombre de archivo de una ruta determinada, debe considerar el comando basename, es parte de Coreutils, por lo que encontrará el nombre base preinstalado en su sistema, por lo que solo necesita ejecutar el siguiente comando para obtenerlo de su linux Extraiga el nombre de archivo de la ruta completa.

Para explicar cómo el comando basename le muestra la salida, tomemos un ejemplo para darnos una idea clara de lo que hace el comando.

déjame caminar el camino completo sshd_config Archivo usando el comando basename en el fragmento a continuación.

$ basename /etc/ssh/sshd_config

Salida del comando anterior

[email protected]:~$ basename /etc/ssh/sshd_config
sshd_config

Como dije, el comando basename mostrará solo el nombre del archivo al eliminar la información del directorio de la ruta completa al archivo correspondiente.

Pongamos otro ejemplo y verás cómo quitar el sufijo o la extensión de este archivo de manual: /usr/share/man/man1/nombrebase.1.gz.

Si usamos el comando anterior, simplemente elimina la ruta del archivo y no el sufijo adjunto al nombre del archivo. Para eliminarlo, debe ejecutar el siguiente comando en la terminal.

$ basename --suffix=.1.gz /usr/share/man/man1/basename.1.gz
or
$ basename -s .1.gz /usr/share/man/man1/basename.1.gz

La salida del comando anterior.

[email protected]:~$ basename -s .1.gz /usr/share/man/man1/basename.1.gz
basename

Otra opción interesante es utilizar -Una Acepta múltiples rutas de archivos para obtener el nombre del archivo en la terminal.Sin embargo, cuando usas -s o -sufijo opciones

$ basename -a /usr/share/man/man1/basename.1.gz /usr/share/man/man1/mawk.1.gz

Use la sustitución de parámetros de bash para extraer nombres de archivos

Alternativamente, puede obtener el nombre de archivo de la ruta completa del archivo sin usar el nombre base. Oh, eso suena genial, pero ¿cómo podemos hacer esto? Sólo tienes que seguir los pasos que se indican a continuación.

Primero, debe conocer la ruta completa al archivo que desea almacenar en una variable, luego imprimirá el nombre del archivo usando echo con un patrón para eliminar la ruta del archivo.

Supongamos que tengo /usr/share/man/man1/nombrebase.1.gz Ejecutaré el siguiente comando para obtener el nombre del archivo.

$ FILEPATH=/usr/share/man/man1/basename.1.gz
$ echo ${FILEPATH##*/}

Salida del comando anterior

[email protected]:~$ FILEPATH=/usr/share/man/man1/basename.1.gz
[email protected]:~$ echo ${FILEPATH##*/}
basename.1.gz

Aparte de eso, también puede extraer la extensión del archivo ejecutando el siguiente comando, que eliminará la ruta del archivo hasta que se encuentre el primer punto, luego mostrará la extensión del archivo.

Puede consultar el fragmento de código a continuación para obtener la extensión del nombre del archivo.

FILEPATH=/usr/share/man/man1/basename.1.gz 
echo "${FILEPATH#*.}"            # It will print 1.gz 
echo "${FILEPATH##*.}"           # It will print gz

Sencillo, ¿no?

Hoja de trucos para obtener el nombre de archivo de la ruta completa

  • Extraiga el nombre de archivo de la ruta completa usando el comando basename
    • $ basename /usr/share/man/man1/basename.1.gz
  • Use el comando basename para extraer el nombre de archivo de la ruta completa sin extensión ni sufijo
    • $ basename --suffix=.1.gz /usr/share/man/man1/basename.1.gz
  • Extraiga nombres de archivo de múltiples rutas completas usando el comando basename
    • $ basename -a /usr/share/man/man1/basename.1.gz /usr/share/man/man1/mawk.1.gz
  • Extraiga el nombre del archivo de la ruta completa usando la sustitución del parámetro bash
    • $ FILEPATH=/usr/share/man/man1/basename.1.gz
    • $ echo ${FILEPATH##*/}
  • Extraiga la extensión de la ruta completa usando la sustitución del parámetro bash
    • FILEPATH=/usr/share/man/man1/basename.1.gz
    • echo "${FILEPATH##*.}"

Eso es todo por ahora, asegúrese de anotar la hoja de trucos de arriba para más adelante.

LEER  Cómo usar el anidamiento, las listas y los comentarios de YAML en los libros de jugadas de Ansible

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba