Glob

Dopasowywanie nazw plików wzorcami z symbolami wieloznacznymi powłoki, np. '*’ czy ’?’. Pozwala działać na wielu plikach naraz.

Glob (od ang. global) to mechanizm powłoki, który zamienia wzorce z symbolami wieloznacznymi na listę pasujących nazw plików i katalogów. Zamiast wyklikiwać czy wypisywać każdy plik z osobna, podajesz wzorzec w stylu *.txt, a powłoka sama podstawia za niego wszystkie pasujące ścieżki — zanim w ogóle uruchomi twoją komendę.

Jak to działa

Kluczowe jest to, że globbing robi powłoka (np. bash, zsh), a nie program, który wywołujesz. Gdy wpiszesz rm *.log, bash najpierw rozwija *.log do np. app.log error.log, a dopiero potem przekazuje te konkretne nazwy do rm. Samo rm nigdy nie widzi gwiazdki — dostaje już gotową listę. To proces zwany filename expansion.

Najważniejsze symbole: * pasuje do dowolnego ciągu znaków (także pustego), ? do dokładnie jednego znaku, a klasa [abc] do jednego znaku z podanego zbioru (np. [0-9] to cyfra). Domyślnie * nie łapie plików ukrytych (zaczynających się od kropki) ani nie wchodzi w podkatalogi — od tego są dodatkowe tryby.

Przykład z praktyki

Masz katalog pełen logów i chcesz obejrzeć tylko te z lutego:

  • ls access-2026-02-*.log — wszystkie logi z lutego 2026,
  • cp report-?.csv backup/ — skopiuje report-1.csv, report-2.csv, ale już nie report-10.csv (bo ? to jeden znak),
  • rm tmp_[0-9]*.tmp — pliki tymczasowe zaczynające się od cyfry.

W zsh i w bashu z włączoną opcją shopt -s globstar dochodzi **, które przeszukuje rekurencyjnie drzewo katalogów — ls **/*.js znajdzie wszystkie pliki JS niezależnie od głębokości zagnieżdżenia.

Częste pułapki

Glob to nie regex. W wyrażeniach regularnych * oznacza „poprzedni znak zero lub więcej razy”, w globie — „cokolwiek”. To dwa różne języki, choć symbole bywają te same.

Druga mina: gdy wzorzec nie pasuje do niczego, bash domyślnie przekazuje go dosłownie. Wpisujesz ls *.pdf w katalogu bez PDF-ów i dostajesz błąd o pliku „*.pdf”. W skryptach ratuje to shopt -s nullglob (pusty wynik zamiast literału). Trzecia: zawsze cytuj wzorce, których nie chcesz rozwijać lokalnie — np. find . -name "*.log", bo bez cudzysłowów to bash, nie find, podstawiłby gwiazdkę i dostałbyś niespodziankę.

Pojęcia powiązane

Warto zerknąć też na: wyrażenia regularne (regex), rozwinięcie nawiasów (brace expansion, np. file{1,2,3}.txt), tyldę ~, polecenie find oraz powłoki bash i zsh, które różnią się domyślnymi ustawieniami globbingu.