Utilizarea comenzii basename în scripturile Bash
Utilizarea comenzii basename în scripturile Bash
În scripturile Bash, una dintre cele mai frecvente sarcini este manipularea căilor de acces la fișiere – în special atunci când doriți să extrageți doar numele fișierului dintr-o cale completă. Aici intervine comanda basename. Deși aparent simplă, basename are cazuri de utilizare puternice atunci când este utilizată corect în scripturi mai complexe, instrumente de automatizare, servicii de găzduire și medii CI/CD.
Ce este basename?
Comanda basename elimină calea directorului și, opțional, o extensie de fișier, lăsând doar numele de bază (componenta finală a căii unui fișier).
🔧 Sintaxă de bază:
basename [cale] [sufix]✅ Exemple simple:
basename /home/user/docs/report.pdf
basename /home/user/docs/report.pdf .pdf
De ce să folosiți basename în scripturi?
Iată doar câteva exemple de nevoi reale de scripting:
Înregistrare: Extragerea numelui unui fișier jurnal în curs de procesare.
Arhivare: Atașați doar numele fișierului la o arhivă comprimată.
Automatizare: Procesați loturi de fișiere și generați nume de fișiere de ieșire.
Conducte: Extrageți numele fișierelor în etapele CI/CD.
Cazuri practice de utilizare în scripturile Bash
📁 1. Parcurgerea în buclă a fișierelor cu logare
Acest script parcurge în buclă fișierele .log, extrage numele fără extensie și înregistrează fiecare acțiune. basename simplifică manipularea numelor de fișiere fără a efectua o feliere complexă a șirurilor.
📂 2. Utilizarea basename pentru căile dinamice ale fișierelor
Să presupunem că primiți căi complete de la intrarea utilizatorului sau de la un alt proces:
#!/bin/bash
input_path="$1"
filename=$(basename "$input_path")
echo "The file name is: $filename"
Utilizarea basename în scriptul dvs. asigură flexibilitate atunci când lucrați cu căi dinamice ale fișierelor, în special în medii precum un VPS Linux în care jurnalele, fișierele de configurare și copiile de rezervă pot fi localizate în directoare diferite. Acest lucru face ca scriptul dvs. să fie robust indiferent dacă i se transmite o cale completă precum /var/log/syslog sau un fișier relativ precum ./config.txt.
🧪 3. Combinarea basename cu dirname
Utilizați-le împreună pentru a izola elementele căii:
#!/bin/bash
path="/etc/nginx/nginx.conf"
echo "Directory: $(dirname "$path")"
echo "Filename: $(basename "$path")"Eliminarea extensiilor de fișier cu basename
Dacă doriți să eliminați extensiile cunoscute:
⚠️ Notă: Acest lucru funcționează numai dacă sufixul se potrivește exact. Astfel, .txt funcționează, dar .TXT sau .tar.gz nu vor funcționa decât dacă sunt specificate explicit.
Pentru extensii multiple, combinați basename cu alte instrumente:
file="/tmp/data/archive.tar.gz"
filename=$(basename "$file")
clean_name=${filename%%.*}
echo "$clean_name"
# Output: archiveSau:





