Introduzione
basename
è un'utilità della riga di comando che rimuove la directory e il suffisso finale dai nomi di file specificati.
Utilizzare il comando basename
Il comando basename
supporta due formati di sintassi:
basename NAME [SUFFIX]
basename OPTION... NAME...
basename
prende un nome file e stampa l'ultimo componente del nome file. Facoltativamente, può anche rimuovere qualsiasi suffisso finale. È un semplice comando che accetta solo poche opzioni.
L'esempio più semplice è stampare il nome del file con le directory principali rimosse:
basename /etc/passwd
L'output includerà il nome del file:
passwd
Il comando basename
rimuove tutti i caratteri finali /
:
basename /usr/local/
basename /usr/local
Entrambi i comandi produrranno lo stesso output:
local
local
Per impostazione predefinita, ogni riga di output termina con un carattere di nuova riga. Per terminare le righe con NUL
, utilizzare l'opzione -z
(--zero
).
Ingressi multipli
Il comando basename
può accettare più nomi come argomenti. Per fare ciò, richiamare il comando con l'opzione -a
(--multiple
), seguita dall'elenco di file separati da spazio.
Ad esempio, per ottenere i nomi dei file di /etc/passwd
e /etc/shadow
dovresti eseguire:
basename -a /etc/passwd /etc/shadow
passwd
shadow
Rimuovere un suffisso finale
Per rimuovere qualsiasi suffisso finale dal nome del file, passare il suffisso come secondo argomento:
basename /etc/hostname name
name
In genere, questa funzione viene utilizzata per rimuovere le estensioni dei file:
basename /etc/sysctl.conf .conf
sysctl
Un altro modo per rimuovere un suffisso finale è specificare il suffisso con l'opzione -s
(--suffix=SUFFIX
):
basename -s .conf /etc/sysctl.conf
sysctl
Questo modulo di sintassi ti consente di rimuovere qualsiasi suffisso finale da più nomi:
basename -a -s .conf /etc/sysctl.conf /etc/sudo.conf
sysctl
sudo
Esempio
L'esempio seguente mostra come utilizzare il comando basename
all'interno di un ciclo bash for
per rinominare tutti i file che terminano con ".jpeg" nella directory corrente sostituendo l'estensione del file da ".jpeg" a ".jpg":
for file in *.jpeg; do
mv -- "$file" "$(basename $file .jpeg).jpg"
done
Se stai usando bash come shell, invece di invocare basename
, puoi usare strip the trailing extension (estensione finale) usando Shell Parameter Expansion.
Conclusione
Il comando basename
rimuove qualsiasi directory iniziale e suffisso finale dal nome.