Przejdź do treści
Lekcja 5 z 117

Kurs › Moduł 1 › Lekcja 5

Gwiazdka, która robi robotę za ciebie

⏱ ok. 3 min czytania· moduł 1: Praca w powłoce

Po tej lekcji: kursant używa wzorców nazw (*, ?, [...]) i rozwijania nawiasów ({a,b}, {1..10}), żeby działać na wielu plikach naraz.

Wstęp

Wracasz z wakacji. Masz 800 zdjęć. Nazywają się IMG_4521.jpg, IMG_4522.jpg i tak dalej. Chcesz je wszystkie przenieść do folderu „Chorwacja 2026”.

Myszką: zaznaczasz, przeciągasz, czekasz, modlisz się, żeby nie upuścić w złym miejscu.

W terminalu:

mv IMG_*.jpg "Chorwacja 2026"/

Jedna linijka. Dziś dowiesz się, co robi ta gwiazdka.

Gwiazdka: „cokolwiek”

Gwiazdka w nazwie pliku znaczy „tu może być cokolwiek, dowolnie długie, nawet nic”.

ls *.jpg
ls raport*
ls *2026*
  • *.jpg — wszystko, co kończy się na .jpg.
  • raport* — wszystko, co zaczyna się od „raport”.
  • *2026* — wszystko, co ma w nazwie „2026” gdziekolwiek.

To jak szukanie w szatni: „podaj mi wszystkie kurtki, które są czerwone”. Nie musisz znać numerków.

Pytajnik: „dokładnie jeden znak”

ls dane?.csv

Pytajnik to dokładnie jeden dowolny znak. Pasuje dane1.csv, dane2.csv, daneA.csv. Nie pasuje dane10.csv, bo tam są dwa znaki.

Nawiasy kwadratowe: „jeden z tych”

ls dane[12].csv
ls dane[0-9].csv

[12] to jeden znak, ale tylko jedynka albo dwójka. [0-9] to dowolna cyfra. Czyli daneA.csv już nie pasuje.

Najważniejsza rzecz, którą trzeba zrozumieć

To nie komenda rozumie gwiazdkę. To Bash.

Kiedy wpisujesz ls *.jpg, Bash najpierw sam przegląda folder, zamienia *.jpg na listę pasujących plików, a dopiero potem woła ls z gotową listą. ls nawet nie wie, że była jakaś gwiazdka.

Jak urzędnik, który dostaje wniosek „wszystkie dokumenty z 2026 roku”, sam idzie do archiwum, wyciąga je i dopiero przekazuje dalej konkretny stos teczek.

Dlaczego to ważne? Bo tak samo działa z rm, cp, mv i każdą inną komendą. I bo zanim coś usuniesz gwiazdką, możesz zobaczyć, na co się zamieni:

echo *.tmp

echo po prostu wypisze listę. Dopiero jak lista jest dobra, zamieniasz echo na rm. To jest ten nawyk, który ratuje kariery.

Nawiasy klamrowe: fabryka nazw

To już co innego. Klamry nie szukają plików, tylko produkują napisy.

echo plik{A,B,C}.txt
echo {1..5}
echo {01..10}
echo {a..e}

Wynik: plikA.txt plikB.txt plikC.txt, potem cyfry od 1 do 5, potem od 01 do 10 z zerem z przodu, potem litery.

I teraz magia:

mkdir -p projekt/{src,docs,testy}
touch odcinek_{01..49}.md

Pierwsza linijka robi trzy foldery naraz. Druga robi 49 plików, ponumerowanych ładnie od 01 do 49. Wszystkie lekcje tej kursu, w jednej linijce.

Gdybyś to robił myszką, skończyłbyś przy lekcji 12 i zaczął się zastanawiać nad sensem życia.

⚠ Typowy błąd

Wzorzec w cudzysłowie:

ls "*.jpg"

Bash odpowie, że nie ma pliku o nazwie *.jpg. Bo cudzysłów mówi Bashowi: „nie ruszaj tego, to dosłowny napis”. Gwiazdka w cudzysłowie to zwykła gwiazdka.

Zapamiętaj: wzorce poza cudzysłowem, nazwy ze spacjami w cudzysłowie. Jak w przykładzie z hakiem: IMG_*.jpg bez cudzysłowu, a "Chorwacja 2026" z cudzysłowem.

✎ Zadanie

Jedną komendą zrób folder wakacje z podfolderami zdjecia, filmy i dokumenty. Drugą komendą zrób w zdjecia pliki od foto_001.jpg do foto_100.jpg. Trzecią wypisz, bez kasowania, tylko te, których numer kończy się na zero.

Pokaż rozwiązanie
mkdir -p wakacje/{zdjecia,filmy,dokumenty}
touch wakacje/zdjecia/foto_{001..100}.jpg
echo wakacje/zdjecia/foto_*0.jpg

Wyjdzie 10 plików: od foto_010 do foto_100. Jeśli wyszło Ci 11, to policz jeszcze raz, ja też za pierwszym razem doliczyłem zero.

Co dalej

Następna lekcja: dokąd idzie to, co komenda wypisuje. Bo zamiast na ekran można to wysłać do pliku. I wreszcie zaczniemy pisać do plików naprawdę.