Práce se jmény souborů - MujMAC.cz - Apple, Mac OS X, Apple iPod

Odběr fotomagazínu

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:

Soutěž

Sponzorem soutěže je:

IDIF

 

Odkud pochází fotografka Anne Erhard?

V dnešní soutěži hrajeme o:

Seriály

Více seriálů



Software

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):

Tématické zařazení:

 » Rubriky  » Informace  

 » Rubriky  » Agregator  

 » Rubriky  » Software  

Diskuse k článku

 

Vložit nový příspěvek   Sbalit příspěvky

 

Zatím nebyl uložen žádný příspěvek, buďte první.

 

 

Vložit nový příspěvek

Jméno:

Pohlaví:

,

E-mail:

Předmět:

Příspěvek:

 

Kontrola:

Do spodního pole opište z obrázku 5 znaků:

Kód pro ověření

 

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: