Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Agregator
Práce se jmény souborů
30. května 2002, 00.00 | Minule jsme si ukázali několik obecných přepínačů, které lze použít při zjišťování hodnoty proměnné. U přepínačů zůstaneme, ale dnes se soustředíme na práci se soubory.
Práce se jmény souborůMinule jsme si ukázali několik obecných přepínačů, které lze použít při zjišťování hodnoty proměnné. U přepínačů zůstaneme, ale dnes se soustředíme na práci se soubory:
Přepínače
Obsahuje-li proměnná jméno souboru i s cestou, můžeme získat jméno složky, ve které soubor leží, pomocí přepínače "h" (poněkud neintuitivní mnemotechnika je, že jméno složky je hlava — "Head" — celého jména):
333 /tmp> x=/Volumes/Disk/000_DiskInfo.txt
334 /tmp> echo $x:h
/Volumes/Disk
335 /tmp>
Bylo-li jméno složky hlavou, je jméno souboru docela určitě ocasem ("Tail"), a proto jej můžeme získat pomocí přepínače "t":
337 /tmp> echo $x:t
000_DiskInfo.txt
338 /tmp>
Přípona je "Extension", a proto pro ni slouží přepínač "e":
336 /tmp> echo $x:e
txt
337 /tmp>
Přepínač "r" pro získání jména bez přípony
335 /tmp> echo $x:r
/Volumes/Disk/000_DiskInfo
336 /tmp>
snad nemá už vůbec žádnou rozumnou mnemotechniku. Zato je ale asi nejčastěji používaný: chceme např. vytvořit záložní kopii souboru dříve, než se souborem začneme pracovat? Stačí provést
cp $soubor $soubor:r~.$soubor:e
Také můžeme — a to i mimo skript — použít příkaz for v nejjednodušší podobě, kterou již známe, pro pohodlné přejmenování souborů:
347 /tmp> ls *.j*
(c).jpg nahled.jpg obr1.jpg obr2.jpg
348 /tmp> for ii in *.jpg; mv $ii $ii:r.jpeg
349 /tmp> ls *.j*
(c).jpeg nahled.jpeg obr1.jpeg obr2.jpeg
350 /tmp>
Specifikace souborů
Už dávno, hned ve třetím dílu, jsme se seznámili se základy specifikace souborů. Zsh však toho umí daleko více, než jen "*" a "[...]"; dnes si ukážeme pár dalších možností, jež se často hodí při psaní skriptů: rozsah číselných hodnot, volbu alternativ a rekursivní hledání.
(Samozřejmě, můžeme je používat kdykoli a kdekoli, nejen ve skriptech: stojí za to si znovu uvědomit, že shellové skripty nakonec nejsou ničím jiným, než docela obyčejnými příkazy shellu, a až na pár mimořádných výjimek můžeme přesně totéž, co bychom použili ve skriptu, kdykoli použít i přímo v příkazové řádce — a naopak.)
Rozsah číselných hodnot je interval typu "<M-N>", kde M a N jsou čísla od-do. Kterékoli z čísel nebo obě lze vynechat, ve smyslu "libovolné číslo":
379 /tmp> ls obr*.jpeg
obr1.jpeg obr13.jpeg obr1324.jpeg obr2.jpeg obrx.jpeg
380 /tmp> ls obr<->.jpeg
obr1.jpeg obr13.jpeg obr1324.jpeg obr2.jpeg
381 /tmp> ls obr<-100>.jpeg
obr1.jpeg obr13.jpeg obr2.jpeg
382 /tmp> ls obr<10->.jpeg
obr13.jpeg obr1324.jpeg
383 /tmp> ls obr<10-100>.jpeg
obr13.jpeg
384 /tmp>
Alternativa funguje prakticky stejně, jako alternativa v regulárních výrazech: vyjadřuje ji znak "|", a znamená "buď, nebo":
384 /tmp> ls obr(<10-100>|x).jpeg
obr13.jpeg obrx.jpeg
385 /tmp>
Rekursivní hledání je jednoduché: zsh nabízí dvě speciální zkratky: "**/" odpovídá libovolnému množství jmen složek, "***/" také, ale navíc bere v úvahy symbolické linky.
513 /tmp> cd /Developer/Documentation
514 /Developer/Documentation> echo **/*Pasteboard*
Cocoa/TasksAndConcepts/ProgrammingTopics/CopyandPaste/Concepts/NamedPasteboards.html
515 /Developer/Documentation> echo ***/*Pasteboard*
Cocoa/Reference/ApplicationKit/Java/Classes/NSPasteboard.html
Cocoa/Reference/ApplicationKit/ObjC_classic/Classes/NSPasteboard.html
Cocoa/TasksAndConcepts/ProgrammingTopics/CopyandPaste/Concepts/NamedPasteboards.html
Help/Cocoa/Reference/ApplicationKit/Java/Classes/NSPasteboard.html
Help/Cocoa/Reference/ApplicationKit/ObjC_classic/Classes/NSPasteboard.html
Help/Cocoa/TasksAndConcepts/ProgrammingTopics/CopyandPaste/Concepts/NamedPasteboards.html
516 /Developer/Documentation>
S proměnnými ještě nejsme hotovi...
...příště si ukážeme pár dalších fint, jmenovitě práci s poli.
Obsah seriálu (více o seriálu):
- Obcování s ďáblem
- Obcování s ďáblem 2 - základy
- Obcování s ďáblem 3 - Práce se soubory
- Obcování s ďáblem 4 - Další práce se soubory
- Obcování s ďáblem 5 - Stále soubory, hlavně linky
- Obcování s ďáblem 6: Pár zbývajících drobností
- Obcování s ďáblem 7: Samá voda, přihořívá, hoří!
- Obcování s ďáblem 8: Jak se do shellu volá, tak se program ozývá
- Obcování s ďáblem 9: Nové finty na programy
- Obcování s ďáblem 10: Do fronty, pánové, do fronty!
- Obcování s ďáblem 11: Standardní vstup a výstup
- Obcování s ďáblem 13: Další triky
- Obcování s ďáblem 14: Vyšší škola hledání souborů
- Obcování s ďáblem 15: Příkaz find stokrát jinak
- Obcování s ďáblem 16: Co se ještě dá uvařit z příkazu find
- Obcování s ďáblem 17: Regulární výrazy
- Obcování s ďáblem 18: Speciální regulární výrazy
- Obcování s ďáblem 19: Skládání regulárních výrazů
- Obcování s ďáblem 20: Regulární výrazy se zpětnými odkazy
- Obcování s ďáblem 21:K čemu je dobrý grep...
- Zázraky ihned, nemožné na počkání: sed
- Obcování s ďáblem - další finty s příkazem sed
- Rozsáhlejší příklad se sedem
- Obcování s ďáblem: Další kouzla, aneb awk
- Awk a proměnné
- Obcování s ďáblem 27: Awk a výrazy
- Obcování s ďáblem: Awk a funkce
- Awk a příkazy
- Co je to vlastně "uživatel"?
- Vlastnictví objektů
- Přístupová práva
- Vlastník, skupina, ostatní...
- Jak je to se skupinami?
- Skupiny a uživatelé
- Scripty
- Komentáře, a volba shellu
- Pro skript může být shell cokoli!
- Shellové skripty a argumenty
- Skripty a proměnné: aritmetika
- Proměnné shellu, "dědění" hodnot
- Práce s proměnnými
- Práce se jmény souborů
- Pole hodnot
- Další triky kolem polí...
- Standardní proměnné shellu
- Základní příkazy pro skripty
- Příkaz if
- Speciální podmínkové příkazy
- Podmínky pro práci se soubory
- Jednoduchý cyklus
- Příkaz for a pomocné příkazy break a continue
- Příkaz case
- Příkazy exit a select
- Rejstřík a přehled
- Procesy
- Informace o procesech
- Další klíčová slova pro příkaz ps
- Příkaz ps: několik praktických přepínačů
- A k čemu že je "ps" dobré?
- Copak procesor, s pamětí je to horší
- Virtuální paměť
- A ještě jednou virtuální paměť
- Zpět k příkazu ps
- Skutečný žrout paměti
- Ještě jednou top
- Doplněk k topu: vm_stat
- Co to tedy všechno znamená?
- Nevychází nám dal a má dáti?
- Kam se stránky ukládají?
- Změna odkládacího disku
- Změna odkládacího disku / fstab
- Poslední poznámka k fstab
- A jak to je se soubory?
- Co vlastně příkaz lsof vypisuje?
- Příkaz lsof a obsah sloupce NAME
- SIPS - Terminál není jen pro nadšence UNIXu
- Tak nám zabili NetInfo, paní Müllerová