Bash programozás
#1
Elküldve: 2008. 01. 10. 09:56
Kezdeném is a sort, napi mentéshez időzített szkriptet készítek. Többfélét is, de van egy terület, ahol kicsit elakadtam. Bár nem teljesen ilyen a helyzet, de hogy értsétek, valami olyasmit szeretnék, hogy van "n" darab userem egy linuxos gépen, mindnekinek van könyvtára, adatokkal a /home alatt. Azt szeretném, hogy legyen valami olyan szkriptem, ami benyalja a könyvtárakat és egyesével feldolgozza (tömöríti) azt.
Azaz pl. van két user, melyek home könyvtárai:
/home/jozsi
/home/pisti
Cél az lenne, ha nekimegy a szkript, akkor generáljon le egy jozsi.tgz és egy pisti.tgz fájlt. Ez a része nem gond, de szeretném, hogy minden alkönyvtárról egy külön tömörített állomány készüljön. Igazából több user van, illetve későbbiekben ha felveszek egy usert, nem akarok minden archiváló szkriptet módosítani, ezért csak a legutolsó opció az, hogy a szkriptben minden egyes usert "felsorolok", azaz manuálsan adom meg a könyvtárak és a fájlok neveit.
Keresnék az interneten is, természetesen, na de ezt az igényt hogyan "fogalmazzam meg" a google-nek
#2
Elküldve: 2008. 01. 10. 14:00
#!/bin/bash dadate=`date +%y%m%d` cd /home for i in `ls`; do tar cvf $i"_"$dadate.tgz done unset i unset dadate
Szerkesztette: mocsi 2008. 01. 10. 14:14 -kor
Where you thought you were going to... were never there.
Where you are ain't no good, unless you get away from there!
#3
Elküldve: 2008. 01. 10. 15:12
Idézet: mocsi - Dátum: 2008. jan. 10., csütörtök - 14:00
#!/bin/bash dadate=`date +%y%m%d` cd /home for i in `ls`; do tar cvf $i"_"$dadate.tgz done unset i unset dadate
Köszi!
Egyelőre nem megy, az "aposztrófok" javítása után az aktuális dátum megállapítását még változtatnom kellett kicsit, ilyen lett most:
#!/bin/bash dadate=$(date +%y%m%d) echo $dadate cd /home for i in 's'; do tar -cvf $i"_"$dadate.tgz done unset i unset dadate
Eredménye:
#./test.sh 080110 tar: Cowardly refusing to create an empty archive Try `tar --help' or `tar --usage' for more information. #
Az első sorában a "080110" az echo eredménye, addig jó a dolog. Tar-ra anyázik, baromi régen pogramoztam, akkor sem túl hatékonyan, de úgy tűnik, a tar-nak nincs megadva a "mit", csak az hogy "mibe". Ezt jól gondolom
#4
Elküldve: 2008. 01. 10. 15:18
a tar-nal jol latod a hibat: a vegere meg egy $i-t kell bigyeszteni!
"Ez van bazdmeg, ha nem tetszik, el lehet menni."
#5
Elküldve: 2008. 01. 10. 15:24
Idézet: Mono - Dátum: 2008. jan. 10., csütörtök - 15:12
Egyelőre nem megy, az "aposztrófok" javítása után az aktuális dátum megállapítását még változtatnom kellett kicsit, ilyen lett most:
#!/bin/bash dadate=$(date +%y%m%d) echo $dadate cd /home for i in 's'; do tar -cvf $i"_"$dadate.tgz done unset i unset dadate
Eredménye:
#./test.sh 080110 tar: Cowardly refusing to create an empty archive Try `tar --help' or `tar --usage' for more information. #
Az első sorában a "080110" az echo eredménye, addig jó a dolog. Tar-ra anyázik, baromi régen pogramoztam, akkor sem túl hatékonyan, de úgy tűnik, a tar-nak nincs megadva a "mit", csak az hogy "mibe". Ezt jól gondolom
Ohh, ja
#!/bin/bash dadate=$(date +%y%m%d) echo $dadate cd /home for i in `ls`; do tar -cvf $i"_$dadate.tgz" $i done unset i unset dadate
Where you thought you were going to... were never there.
Where you are ain't no good, unless you get away from there!
#6
Elküldve: 2008. 01. 10. 15:25
Idézet: Mono - Dátum: 2008. jan. 10., csütörtök - 15:12
Igen, kell oda mégegy $i.
Én ezt akartam javasolni, ez mondjuk nem dátumoz:
for i in `ls`; do tar -cvf $i.tgz $i;done
A te verziód így kéne:
#!/bin/bash dadate=$(date +%y%m%d) echo $dadate cd /home for i in 'ls'; do [B]tar -cvf $i"_"$dadate.tgz $i[/B] done unset i unset dadate
#7
Elküldve: 2008. 01. 10. 15:25
Idézet: bogdan - Dátum: 2008. jan. 10., csütörtök - 15:18
a tar-nal jol latod a hibat: a vegere meg egy $i-t kell bigyeszteni!
pontosan, kifelejtettem a madosik parametert thx
Where you thought you were going to... were never there.
Where you are ain't no good, unless you get away from there!
#8
Elküldve: 2008. 01. 10. 15:28
Idézet: zZsOlTi - Dátum: 2008. jan. 10., csütörtök - 15:25
Én ezt akartam javasolni, ez mondjuk nem dátumoz:
for i in `ls`; do tar -cvf $i.tgz $i;done
A te verziód így kéne:
#!/bin/bash dadate=$(date +%y%m%d) echo $dadate cd /home for i in 'ls'; do [B]tar -cvf $i"_"$dadate.tgz $i[/B] done unset i unset dadate
Itt is . A tied konzol zsokeilag szebb , de a datumot azert raktam bele, mert valami napi mentesrol volt szo.
Szerkesztette: mocsi 2008. 01. 10. 15:29 -kor
Where you thought you were going to... were never there.
Where you are ain't no good, unless you get away from there!
#9
Elküldve: 2008. 01. 10. 15:31
for i in `ls`; do tar -cvf $i-`date +%y%m%d`.tgz $i;done
"Ez van bazdmeg, ha nem tetszik, el lehet menni."
#10
Elküldve: 2008. 01. 10. 15:36
2. mindkét megoldás elhasal azon, ha a tömörítendő könyvtárak nevében szóköz van (ami felhasználói nevek esetén nem túl valószínű, de ha egyszer netán másra is kellene használni a scriptet...)
szerk.: mostmár mindhárom (;
Szerkesztette: szeder 2008. 01. 10. 15:36 -kor
#11
Elküldve: 2008. 01. 10. 15:41
2) en zsh-hoz vagyok szokva, igy foreach-el kezdenem csinalni, nem `ls`-el, ott nem jon elo ilyen hiba.
"Ez van bazdmeg, ha nem tetszik, el lehet menni."
#12
Elküldve: 2008. 01. 10. 15:43
Idézet: bogdan - Dátum: 2008. jan. 10., csütörtök - 15:18
a tar-nal jol latod a hibat: a vegere meg egy $i-t kell bigyeszteni!
Köszönöm a segítséget
Most így néz ki:
#!/bin/bash dadate=$(date +%y%m%d) echo $dadate cd /home for i in 's'; do tar -cvf $i"_"$dadate.tgz $i done unset i unset dadate
Eredménye egy s_080110.tar fájl a /home könyvtárban, mérete 0, hibaüzenet, melyet kaptam a szkript futtatásakor:
# ./test.sh 080110 tar: s: Cannot stat: Nincs ilyen fájl vagy könyvtár tar: Error exit delayed from previous errors #
Az aposztrófokkal nagyjából tisztában vagyok, viszont számomra úgy tűnt, nem a mgefelelő került oda a copy-paste eredményeként. Magyar billentyűzetet használok mindenhol, mert csak , azon a <Shift>+<1> eredményeként létrejött "fajtát" tartom megfelelőnek - helytelenül
#13
Elküldve: 2008. 01. 10. 15:50
#!/bin/bash dadate=$(date +%y%m%d) echo $dadate cd /home/ for i in 'ls'; do tar -cvf /root/$i"_"$dadate.tar $i done unset i unset dadate
A root-ban létrejön egy üres, ls_080110.tar fájl, hibaüzenet:
./test.sh 080110 tar: ls: Cannot stat: Nincs ilyen fájl vagy könyvtár tar: Error exit delayed from previous errors
#14
Elküldve: 2008. 01. 10. 15:50
http://www.inf.u-sze...dek/oprend.html
jegyzet 68. oldala!
Shift-1 az biza egy MASIK aposztrof a 3(!) kozul.
tehat nem 'ls', hanem `ls`! nagyon mas!
Szerkesztette: bogdan 2008. 01. 10. 15:51 -kor
"Ez van bazdmeg, ha nem tetszik, el lehet menni."
#15
Elküldve: 2008. 01. 10. 15:55
Idézet: bogdan - Dátum: 2008. jan. 10., csütörtök - 15:50
http://www.inf.u-sze...dek/oprend.html
jegyzet 68. oldala!
Shift-1 az biza egy MASIK aposztrof a 3(!) kozul.
tehat nem 'ls', hanem `ls`! nagyon mas!
Jogos!
Innen kimásolva a "nagyon más" aposztrófot, tökéletesen megy!
Ezer köszönet mindenkinek!
#16
Elküldve: 2008. 01. 10. 16:00
"Ez van bazdmeg, ha nem tetszik, el lehet menni."
#17
Elküldve: 2008. 01. 10. 16:03
Idézet: bogdan - Dátum: 2008. jan. 10., csütörtök - 16:00
Mindenképpen, le is mentettem!
#18
Elküldve: 2008. 01. 10. 16:48
Idézet: bogdan - Dátum: 2008. jan. 10., csütörtök - 15:41
Megfelelően beállított IFS-ral bash alatt se gond, de az alapbeállítás az, hogy szóközök is szeparálnak.
#19
Elküldve: 2008. 10. 23. 13:48
Feladat:
Keressuk meg a filerendszerben (csak a home directory-ban) a file duplikatumokat
(meret, nev es tartalom alapjan ellenorizzuk, hogy valoban duplikatum-e)
es helyettesitsuk oket egy symlinkkel. Hogy melyik maradjon meg es melyik legyen
a symlink azt a felhasznalotol kerdezzuk meg (ld. a bash read parancsat).
ha valaki segítene, nagyon megköszönném neki sokat jelentene nekem
Szerkesztette: Danika123 2008. 10. 23. 13:49 -kor
#20
Elküldve: 2008. 10. 31. 09:00
Idézet: Danika123 - Dátum: 2008. okt. 23., csütörtök - 14:48
Feladat:
Keressuk meg a filerendszerben (csak a home directory-ban) a file duplikatumokat
(meret, nev es tartalom alapjan ellenorizzuk, hogy valoban duplikatum-e)
es helyettesitsuk oket egy symlinkkel. Hogy melyik maradjon meg es melyik legyen
a symlink azt a felhasznalotol kerdezzuk meg (ld. a bash read parancsat).
ha valaki segítene, nagyon megköszönném neki sokat jelentene nekem
Megírni senki nem fogja helyetted, az biztos.
Szerintem kezdj neki, és konkrét probléma esetén biztos mindenki segítőkész(ebb) lesz.
udv
letix