Używanie polecenia basename w skryptach Bash
Używanie polecenia basename w skryptach Bash
W skryptach Bash jedną z najczęstszych zadań jest manipulacja ścieżkami plików—szczególnie gdy chcesz wyodrębnić tylko nazwę pliku z pełnej ścieżki. W tym miejscu przychodzi polecenie basename. Choć wydaje się proste, basename ma potężne zastosowania, gdy jest używane poprawnie w bardziej złożonych skryptach, narzędziach automatyzacji, usługach hostingowych i środowiskach CI/CD.
Czym jest basename?
Polecenie basename usuwa ścieżkę katalogu i opcjonalnie usuwa rozszerzenie pliku, pozostawiając tylko nazwę podstawową (ostatni element ścieżki pliku).
🔧 Podstawowa składnia:
basename [path] [suffix]✅ Proste przykłady:
basename /home/user/docs/report.pdf
basename /home/user/docs/report.pdf .pdf
Dlaczego używać basename w skryptach?
Oto kilka przykładów rzeczywistych potrzeb skryptowych:
Rejestrowanie: Wyodrębnij nazwę pliku dziennika, który jest przetwarzany.
Archiwizacja: Dodaj tylko nazwę pliku do skompresowanego archiwum.
Automatyzacja: Przetwarzaj partie plików i generuj nazwy wyjściowe plików.
Pipelines: Wyodrębnij nazwy plików w krokach CI/CD.
Praktyczne przypadki użycia w skryptach Bash
📁 1. Iterowanie po plikach z rejestrowaniem
Ten skrypt iteruje po plikach .log, wyodrębnia nazwę bez rozszerzenia i rejestruje każdą akcję. basename upraszcza obsługę nazw plików bez skomplikowanego krojenia ciągów.
📂 2. Używanie basename dla dynamicznych ścieżek plików
Załóżmy, że otrzymujesz pełne ścieżki z wejścia użytkownika lub innego procesu:
#!/bin/bash
input_path="$1"
filename=$(basename "$input_path")
echo "The file name is: $filename"
Używanie basename w swoim skrypcie zapewnia elastyczność podczas pracy z dynamicznymi ścieżkami plików, szczególnie w środowiskach takich jak Linux VPS, gdzie dzienniki, pliki konfiguracyjne i kopie zapasowe mogą znajdować się w różnych katalogach. To sprawia, że twój skrypt jest odporny niezależnie od tego, czy przekazano mu pełną ścieżkę, taką jak /var/log/syslog, czy względny plik, taki jak ./config.txt.
🧪 3. Łączenie basename z dirname
Użyj ich razem, aby izolować elementy ścieżki:
#!/bin/bash
path="/etc/nginx/nginx.conf"
echo "Directory: $(dirname "$path")"
echo "Filename: $(basename "$path")"Usuwanie rozszerzeń plików za pomocą basename
Jeśli chcesz usunąć znane rozszerzenia:
⚠️ Uwaga: To działa tylko wtedy, gdy sufiks dokładnie pasuje. Więc .txt działa, ale .TXT lub .tar.gz nie zadziała, chyba że zostanie to wyraźnie określone.
Dla wielu rozszerzeń połącz basename z innymi narzędziami:
file="/tmp/data/archive.tar.gz"
filename=$(basename "$file")
clean_name=${filename%%.*}
echo "$clean_name"
# Output: archiveLub:





