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:
basename [path] [suffix]✅ Esempi semplici:
basename /home/user/docs/report.pdf
basename /home/user/docs/report.pdf .pdf
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: archiveOppure:





