Több fájl kitömörítése egyszerre Linuxon
Adott egy mappában sok tömörített fájl (pl. rar vagy zip), melyet jó lenne lehetőség szerint egy paranccsal kicsomagolni.
Szerencsére könnyen meg lehet ezt oldani egy bash ciklussal. (A leírás célja, hogy bemutassam a BASH for ciklusát egy működő példával)
Az ilyen egyszerű ciklusokra egyszerűen használható a for ciklus.
Nézzük milyen a “formulája”:
1 2 3 4 | for [var] in [ertek] do parancs $[var]; done |
Az első sorban megadott [var] változó a folyamatosan (egymás után, amíg el nem fogynak) felveszi a [ertek] helyén szereplő dolgot. Majd ezután a ciklusban a harmadik sorban végrehajtódik egy parancs, melynke paraméterül a [var] értéket adtuk meg.
Nézzünk egy egyszerű példát, mely kiírja 1-5-ig a számokat:
1 2 3 4 | for i in 1 2 3 4 5 do echo $i done |
Az echo parancs kiírja, azt ami az i változóban van, egészen addig amíg el nem fogy.
Írhatjuk a parancsot akár egy sorba is:
1 | for i in 1 2 3 4 5; do echo $i; done |
Nem csak előre megadott értékeket használhatunk, hanem akár egy parancs kimenetét is.
Nézzük meg 1-10-ig a számokat.
1 2 3 4 | for (( i=0 ; $i<10 ; i=$i+1 )) do echo $i done |
Az i kezdetben 0, majd mindig hozzáadódik 1 (i=$i+1), egészen addig míg el nem éri a 10-et ($i<10)
1 2 3 4 | for i in $( ls ) do echo Fájl: $i done |
A fenti ciklus a $( ls )-ben lévő parancsot végrehajtja, majd annak az eredményét helyettesíti be. Jelen esetben egy fájllistát kapunk.
Nézzük akkor, hogyan tudunk tömörített fájlokat kicsomagolni.
Először keressük meg az rar kiterjesztésű fájlokat, majd azokat rakjuk egy kitomorit nevű változóba
1 | for kitomorit in *.rar |
Majd adjuk át ezt paraméterként az unrarnak (az e jelenti, hogy kicsomagolás)
3 | unrar e "$kitomorit" |
Egybe a parancs:
1 2 3 4 | for kitomorit in *.rar do unrar e "$kitomorit" done |
Vagy egy sorban
1 | for kitomorit in *.rar; do unrar e "$kitomorit"; done |
Zip fájlok esetén (egy sorban):
1 | for kitomorit in *.zip; do unzip "$kitomorit"; done |
Remélem ezzel a kis példával sikerült bemutatnom a bashban használható for ciklust.
