GNU/Linux >> Tutoriales Linux >  >> Linux

Extraiga el nombre base del archivo sin ruta y extensión en bash

El comando basename tiene dos invocaciones diferentes; en uno, especifica solo la ruta, en cuyo caso le da el último componente, mientras que en el otro también le da un sufijo que eliminará. Por lo tanto, puede simplificar su código de ejemplo utilizando la segunda invocación de basename. Además, tenga cuidado de citar correctamente las cosas:

fbname=$(basename "$1" .txt)
echo "$fbname"

Aquí hay frases breves:

  1. $(basename "${s%.*}")
  2. $(basename "${s}" ".${s##*.}")

Necesitaba esto, lo mismo que pidieron bongbang y w4etwetewtwet.


No tienes que llamar al basename externo dominio. En su lugar, podría usar los siguientes comandos:

$ s=/the/path/foo.txt
$ echo "${s##*/}"
foo.txt
$ s=${s##*/}
$ echo "${s%.txt}"
foo
$ echo "${s%.*}"
foo

Tenga en cuenta que esta solución debería funcionar en todos los modelos recientes (posteriores a 2004 ) POSIX shells compatibles (por ejemplo, bash , dash , ksh , etc.).

Fuente:Shell Command Language 2.6.2 Expansión de parámetros

Más información sobre manipulaciones de cadenas bash:http://tldp.org/LDP/LG/issue18/bash.html


Una combinación de nombre base y corte funciona bien, incluso en el caso de terminación doble como .tar.gz :

fbname=$(basename "$fullfile" | cut -d. -f1)

Sería interesante si esta solución necesitara menos potencia aritmética que la expansión de parámetros de Bash.


Linux
  1. Cómo extraer archivos .gz y .tar.gz en Linux

  2. Uso del comando Linux Basename en Bash Scripts

  3. ¿Cómo se normaliza una ruta de archivo en Bash?

  4. Unix:crea una ruta de carpetas y archivos

  5. ¿Qué es exactamente <() en bash (y =() en zsh)?

Comprender las rutas de los archivos y cómo usarlas en Linux

Cómo usar ISPConfig y Seafile sin modificaciones manuales de archivos

Una función Bash para extraer archivos de archivos de varios tipos

Comando tar de Linux para comprimir y extraer archivos

bash:redirigir stderr al archivo y stdout + stderr a la pantalla

finalización del archivo bash sin especificar ./