GNU/Linux >> Linux Esercitazione >  >> Linux

Estrai il nome base del file senza percorso ed estensione in bash

Il comando basename ha due diverse invocazioni; in uno specifichi solo il percorso, nel qual caso ti dà l'ultimo componente, mentre nell'altro dai anche un suffisso che rimuoverà. Quindi, puoi semplificare il tuo codice di esempio usando la seconda invocazione di basename. Inoltre, fai attenzione a citare correttamente le cose:

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

Ecco le battute:

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

Avevo bisogno di questo, lo stesso richiesto da bongbang e w4etwetewtwet.


Non devi chiamare il basename esterno comando. Invece, puoi usare i seguenti comandi:

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

Tieni presente che questa soluzione dovrebbe funzionare in tutte le versioni recenti (post 2004 ) POSIX shell conformi, (ad es. bash , dash , ksh , ecc.).

Fonte:Shell Command Language 2.6.2 Espansione dei parametri

Ulteriori informazioni sulla manipolazione delle stringhe bash:http://tldp.org/LDP/LG/issue18/bash.html


Una combinazione di basename e cut funziona bene, anche in caso di doppia desinenza come .tar.gz :

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

Sarebbe interessante se questa soluzione richiedesse meno potenza aritmetica di Bash Parameter Expansion.


Linux
  1. Come estrarre i file .gz e .tar.gz in Linux

  2. Come nascondere file e cartelle in File Manager senza rinominare

  3. Come si normalizza un percorso di file in Bash?

  4. grep senza mostrare percorso/file:riga

  5. Come eseguire un file senza estensione .sh nella shell

Comprendere i percorsi dei file e come usarli in Linux

Come utilizzare ISPConfig e Seafile senza modifiche manuali ai file

Una funzione Bash per estrarre archivi di file di vario tipo

Comando tar di Linux per comprimere ed estrarre file

Cos'è esattamente <() in bash (e =() in zsh)?

bash:reindirizza stderr al file e stdout + stderr allo schermo