basename to mały, ale zaskakująco przydatny scyzoryk Linuksa: bierze pełną ścieżkę i zwraca samą nazwę pliku, obcinając wszystko, co jest przed ostatnim ukośnikiem. Opcjonalnie potrafi też zdjąć rozszerzenie. W skryptach ratuje, gdy masz zmienną w stylu /var/log/nginx/access.log, a potrzebujesz tylko access.log — albo gdy chcesz zbudować nazwę pliku wyjściowego bez powtarzania całej ścieżki na sztywno.
Składnia i najważniejsze opcje
Podstawowa składnia: basename ŚCIEŻKA [SUFIKS]
-a,--multiple— pozwala podać wiele ścieżek naraz; każdy argument jest traktowany jako osobna nazwa.-s SUFIKS,--suffix=SUFIKS— usuwa wskazany przyrostek (np. rozszerzenie) z każdej nazwy; automatycznie włącza tryb-a.-z,--zero— kończy każdą linię bajtem NUL zamiast znakiem nowej linii (przydatne w parze zxargs -0).--help— wyświetla skróconą pomoc i listę opcji.--version— pokazuje wersję narzędzia (część pakietu GNU coreutils).
Bez opcji -s drugi argument działa jak sufiks do usunięcia: basename ŚCIEŻKA SUFIKS.
Przykłady użycia
basename /usr/bin/sort— zwracasort, czyli samą nazwę pliku bez katalogów.basename /home/user/raport.csv .csv— zwracaraport, bo zdejmuje rozszerzenie podane jako drugi argument.basename -s .tar.gz backup-2026.tar.gz— zwracabackup-2026; opcja-sczyści złożony przyrostek.basename -a /tmp/a.log /var/b.log— wypisujea.logib.logw osobnych liniach, przetwarzając obie ścieżki za jednym wywołaniem.name=$(basename "$0")— w skrypcie wyciąga nazwę samego skryptu, żeby ładnie ją pokazać w komunikatach.
Częste błędy i pułapki
Po pierwsze: basename to operacja czysto tekstowa na łańcuchu znaków — nie sprawdza, czy plik w ogóle istnieje. Literówka w ścieżce przejdzie bez słowa skargi. Po drugie, sufiks musi pasować dokładnie: basename plik.JPG .jpg nie obetnie nic, bo wielkość liter ma znaczenie. Uważaj też, żeby nie zdjąć całej nazwy — basename .bashrc .bashrc zwróci .bashrc, bo narzędzie nie pozwala wyzerować nazwy do pustego ciągu. Ścieżki ze spacjami zawsze bierz w cudzysłów (basename "$plik"), inaczej powłoka rozbije je na kawałki.
Różnice między systemami: wersja GNU (typowy Linux) ma -a, -s i -z. Na macOS i innych BSD basename również wspiera -a oraz -s, ale flagi -z tam nie znajdziesz — jeśli piszesz przenośny skrypt, nie zakładaj jej obecności.
Powiązane komendy: dirname (zwraca odwrotność — samą ścieżkę katalogu), readlink -f (pełna ścieżka kanoniczna), realpath, oraz parametry powłoki ${zmienna##*/} i ${zmienna%.*} robiące to samo bez uruchamiania procesu.