Egyszerű archiváló bash szkript készítése
Ebben a leírásban bemutatom, hogyan lehet elkészíteni egy egyszerű archiváló bash szkriptet. Egy általam készített szkripten keresztül mutatom be a lépéseket, melyek csupán egy lehetőséget biztosítanak, a végleges működés mindig rajtunk múlik. Kezdjünk is bele.
Először is nyissuk meg kedvenc szövegszerkesztőnket.
Mielőtt bármit csinálnánk adjuk meg, hogy milyen szkriptet is csinálunk:
#!/bin/bashÉn először könyvtárat váltottam, így egyszerűbben tudok későbbiekben parancsokat kiadni az adott könyvtárra. Tehát:
cd /archivalando/fajlok/eleresi/utja
Én szeretném mindig az előző hónapban létrehozott fájlokat archiválni, ezért le kell ezt is kezelni. Az aktuális hónapot egy egyszerű paranccsal le tudom kérdezni:
date +%m
Állítsuk be az előző hónapot egy változóba:
old_honap=`date --date="1 month ago" +%m`
Ezután egy változóba felveszem az előző év és hónap értékét, hogy tudjak szűrni erre a paraméterre:
ido=`date --date="1 month ago" +%Y-%m`
Majd elmentem egy segéd fájlba az archiválandó fájlok nevét, amit így később egyszerűen ki tudok nyerni:
ls -l ../arcvivalandofajlokkonyvtara | grep -v ^d | grep $ido | awk '{print $8}' > archive_$old_honap/backup.txt
Leellenőrzöm, hogy létezik-e már a könyvtár, amit szeretnék létrehozni. (Itt lehet módosítani aszerint, hogyan kezelje a szkript ha már létezik a könyvtár.)
if [ -e /archivalando/fajlok/eleresi/utja/archive_$old_honap ]; then echo "Az archive_$old_honap konyvtar letezik" else mkdir archive_$old_honap echo "Az archive_$old_honap konyvtarat letrehoztam" fi
Majd létrehozunk egy könyvtárat az archív fájljaink számára:
if [ -e /archiv/fajlok/eleresi/utja/backup ]; then echo "A backup konyvtar letezik" else mkdir /archiv/fajlok/eleresi/utja/backup echo "A backup konyvtarat letrehoztam" fi
Ezután átmozgathatjuk az elmentendő fájlokat a könyvtárba:
cat archive_$old_honap/backup.txt | while read sor; do mv $sor archive_$old_honap done
Ezután törölhetjük a segéd fájlt, mivel ezt nem szeretnénk elmenteni:
rm archive_$old_honap/backup.txt
Beállítjuk, hogy melyik könyvtár legyen tömörítve és milyen fájlként mentse el, illetve hova a program. Ezt változókban tároljuk:
OUTPUT=./backup/archive_$(date +%Y)-$old_honap.tgz BUDIR="./archive_$old_honap"
Majd elvégezzük az archiválást:
tar -czf $OUTPUT $BUDIR
Utolsó előtti műveletként törölhetjük a létrehozott könyvtárat tartalmával együtt, azonban vigyázzunk vele, esetleges adat vesztést okozhat, ezért nyugodtan ki is lehet kommentezni:
rm -R ./archive_$old_honap
Végül üzenetet küldhetünk magunknak a program sikerességéről, vagy esetleges hibájáról:
if [ $? == 0 ]; then #Display confirmation message echo "A $OUTPUT fajl letrejott a $BUDIR konyvtarbol." else #Display error message message echo "Hiba tortent a $OUTPUT fajl $BUDIR konyvtarbol valo letrehozasa kozben." fi
Mielőtt használnák a szkriptünket ne felejtsünk el futtatási jogot adni rá:
chmod +x archive_szkript.shÍme a program egyben:
#!/bin/bash ####################################################### ## Simple archive script... ## Create by blaselinux: (blaselinux@gmail.com) ## Licence GNU GPL v3 or later. ## http://www.gnu.org/licenses/gpl.html ## http://gnu.hu/gplv3.html ####################################################### # Change the directory to the archive files cd /home/blaselinux/Sablonok/archive_teszt # Set the old_month old_honap=`date --date="1 month ago" +%m` # Checking the files ido=`date --date="1 month ago" +%Y-%m` ls -l ../archive_teszt | grep -v ^d | grep $ido | awk '{print $8}' > archive_$old_honap/backup.txt # Checking the directory if [ -e /home/blaselinux/Sablonok/archive_teszt/archive_$old_honap ]; then echo "Az archive_$old_honap konyvtar letezik" else mkdir archive_$old_honap echo "Az archive_$old_honap konyvtarat letrehoztam" fi # Make a backup directory if it doesn't exist if [ -e /archiv/fajlok/eleresi/utja/backup ]; then echo "A backup konyvtar letezik" else mkdir /archiv/fajlok/eleresi/utja/backup echo "A backup konyvtarat letrehoztam" fi # Moving the files cat archive_$old_honap/backup.txt | while read sor; do mv $sor archive_$old_honap done # Delete the aide file rm archive_$old_honap/backup.txt OUTPUT=./backup/archive_$(date +%Y)-$old_honap.tgz BUDIR="./archive_$old_honap" echo "Az archivalas elkezdese a $BUDIR konyvtarbol a $OUTPUT fajlba" tar -czf $OUTPUT $BUDIR # Delete the ./archive_$old_honap directory with files. # Please be careful!!! rm -R ./archive_$old_honap if [ $? == 0 ]; then #Display confirmation message echo "A $OUTPUT fajl letrejott a $BUDIR konyvtarbol." else #Display error message message echo "Hiba tortent a $OUTPUT fajl $BUDIR konyvtarbol valo letrehozasa kozben." fi
Készen is volnánk. Remélhetőleg érthető a magyarázat, használjátok egészséggel.
A szkript letölthető innen.
Köszönet iKL-nek a segítségért!
