Zapni terminál a přepni se do adresáře data-shell/north-pacific-gyre/2012-07-03.
Pomocí ls se podívej, co v adresáři je:
$ ls
goodiff NENE01736A.txt NENE01843A.txt NENE01978B.txt NENE02040Z.txt
goostats NENE01751A.txt NENE01843B.txt NENE02018B.txt NENE02043A.txt
NENE01729A.txt NENE01751B.txt NENE01971Z.txt NENE02040A.txt NENE02043B.txt
NENE01729B.txt NENE01812A.txt NENE01978A.txt NENE02040B.txt
Úkol: Kolik mají řádků datové soubory s .txt na konci?
Všechny by měly mít 300 řádků. Když se ale podíváš na výstup, zjistíš, že tomu tak není. Představ si, že máš těchto souborů k ověření několik tisíc a procházení očima nebude možné. Jak zjistíš, jestli všechny tyto soubory mají opravdu 300 řádků?
Soubory končí většinou na písmenko A nebo B, ale je zde jeden končící Z. Spočítej, kolik je souborů končících Z.
Už podle názvů tyhle soubory nevypadají na to, že by je někdo vytvořil ručně. Můžeš bezpečně předpokládat, že jsou výstupem nějakého programu na zpracování vzorků.
Podívej se do několika z nich (např. pomocí příkazu less), abys zjistila jak zhruba vypadají informace v nich obsažené.
Obsahem je relativní výskyt 300 bílkovin v různých hloubkách oceánu.
A a B jsou dvě hloubky, na nichž bylo prováděno měření; Z znamená, že se hloubku z nějakého důvodu nepodařilo zjistit.
Kratší soubor je způsobený restarem počítače během měření.
Nevíme, zda takový soubor bude použitelný pro další zpracování.
Už znáš hvězdičku a otazník, díky nimž můžeš vytvořit masky souborů.
Existují i další „finty“, jak jména souborů filtrovat. Jednu z nich si teď ukážeme.
Když dáš do hranatých závorek výčet znaků, které chceš hledat, např. [AB], celý výraz v závorkách se nahradí za jedno písmenko – buďto A nebo B.
Můžeš tak odfiltrovat soubory, které končí na Z:
$ ls *[AB].txt
NENE01729A.txt NENE01751A.txt NENE01843A.txt NENE01978B.txt NENE02040B.txt
NENE01729B.txt NENE01751B.txt NENE01843B.txt NENE02018B.txt NENE02043A.txt
NENE01736A.txt NENE01812A.txt NENE01978A.txt NENE02040A.txt NENE02043B.txt
V tomto případě dostaneš stejný výstup, když napíšeš příkaz:
$ ls *A.txt *B.txt
Výstup se ale bude lišit v případě, kdy neexistuje soubor kterému taková maska
odpovídá.
Představ si, že chceš vypsat všechny soubory, které mají na konci A, B nebo C:
$ ls *[ABC].txt
NENE01729A.txt NENE01751A.txt NENE01843A.txt NENE01978B.txt NENE02040B.txt
NENE01729B.txt NENE01751B.txt NENE01843B.txt NENE02018B.txt NENE02043A.txt
NENE01736A.txt NENE01812A.txt NENE01978A.txt NENE02040A.txt NENE02043B.txt
$ ls *A.txt *B.txt *C.txt
ls: cannot access '*C.txt': No such file or directory
NENE01729A.txt NENE01751B.txt NENE01978A.txt NENE02040B.txt
NENE01729B.txt NENE01812A.txt NENE01978B.txt NENE02043A.txt
NENE01736A.txt NENE01843A.txt NENE02018B.txt NENE02043B.txt
NENE01751A.txt NENE01843B.txt NENE02040A.txt
Bash nechá *C.txt beze změny, protože takový soubor nenajde.
Program ls si pak postěžuje že soubor *C.txt nezná.
Zkus si, co v těchto případech dostává příkaz ls od Bashe.
To můžeš zjistit tak, že místo ls zadáš echo:
$ echo *[ABC].txt
$ echo *A.txt *B.txt *C.txt