Utilizzo del comando basename negli script Bash
Utilizzo del comando basename negli script Bash
Negli script Bash, una delle operazioni più comuni è la manipolazione dei percorsi dei file, soprattutto quando si vuole estrarre solo il nome del file da un percorso completo. È qui che entra in gioco il comando basename. Anche se apparentemente semplice, basename ha un uso potente se usato correttamente in script più complessi, strumenti di automazione, servizi di hosting e ambienti CI/CD.
Che cos’è basename?
Il comando basename elimina il percorso della directory e, facoltativamente, l’estensione di un file, lasciando solo il nome di base (il componente finale di un percorso di file).
🔧 Sintassi di base:
✅ Esempi semplici:
Perché usare basename negli script?
Ecco alcuni esempi di esigenze reali di scripting:
Registrazione: Estrarre il nome di un file di log in fase di elaborazione.
Archiviazione: Aggiungere solo il nome del file a un archivio compresso.
Automazione: Elaborazione di batch di file e generazione di nomi di file di output.
Pipeline: Estrarre i nomi dei file nelle fasi CI/CD.
Casi d’uso pratici negli script Bash
📁 1. Eseguire il looping dei file con la registrazione
Questo script esegue un loop sui file .log, estrae il nome senza l’estensione e registra ogni azione. basename semplifica la gestione dei nomi dei file senza complesse operazioni di taglio delle stringhe.
📂 2. Uso di basename per i percorsi dinamici dei file
Supponiamo di ricevere percorsi completi dall’input dell’utente o da un altro processo:
#!/bin/bash
input_path="$1"
filename=$(basename "$input_path")
echo "The file name is: $filename"

L’uso di basename nello script garantisce la flessibilità quando si lavora con percorsi di file dinamici, specialmente in ambienti come un VPS Linux dove i log, i file di configurazione e i backup possono risiedere in directory diverse. Questo rende lo script robusto, indipendentemente dal fatto che gli venga passato un percorso completo come /var/log/syslog o un file relativo come ./config.txt.
🧪 3. Combinazione di basename e dirname
Usateli insieme per isolare gli elementi del percorso:
#!/bin/bash
path="/etc/nginx/nginx.conf"
echo "Directory: $(dirname "$path")"
echo "Filename: $(basename "$path")"
Rimozione delle estensioni dei file con basename
Se si desidera rimuovere le estensioni conosciute:
⚠️ Nota: questo funziona solo se il suffisso corrisponde esattamente. Quindi .txt funziona, ma .TXT o .tar.gz no, a meno che non sia specificato esplicitamente.
Per estensioni multiple, combinare basename con altri strumenti:
file="/tmp/data/archive.tar.gz"
filename=$(basename "$file")
clean_name=${filename%%.*}
echo "$clean_name"
# Output: archive
Oppure:
basename vs Espansione di parametri
Sebbene basename sia intuitivo, genera un sottoprocesso. Per gli script critici dal punto di vista delle prestazioni o per i cicli di grandi dimensioni, preferire le alternative Bash pure:
Equivalente nativo di Bash:
Rimuovere l’estensione con Bash nativo:
✅ Più veloce che chiamare il nome di base esterno .
Esempio: Rinominare i file in blocco
Supponiamo di voler anteporre a tutti i file .jpg la data di oggi:







