Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Shell - bash Scripta

[es] :: Skript jezici :: Shell - bash Scripta

[ Pregleda: 3868 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

cisco89

Član broj: 160062
Poruke: 89
..2-tull-pth.comindico.com.au.



+9 Profil

icon Shell - bash Scripta17.10.2007. u 13:48 - pre 162 meseci
Zdravo svima

Imam jedan zadatak koji nikako nemogu da resim:

Pitanje ide ovako

Make a shell script which creates a listing which displays only those files created in <month> and <day> of the parameter list.

Znaci kad se uradi ls -l na linux terminalu treba da se pojave fajlovi sto su napravljeni na <mesec> i <dan>


hvala unapred
 
Odgovor na temu

random
Vladimir Vrzić
Beograd

Član broj: 85
Poruke: 3866
*.adsl-3.sezampro.yu.

Sajt: www.last.fm/user/vrza


+4 Profil

icon Re: Shell - bash Scripta18.10.2007. u 16:37 - pre 162 meseci
Prvo, pitanje je nebulozno, jer na Unixu (i Linuxu) se ne može saznati kada je fajl kreiran. Može se znati kada je poslednji put promenjen, evo primera za to.

Code:

MONTH=$1
DAY=$2
find . -mtime $(( ( $(date +%s) - $(date -d "$MONTH $DAY" +%s) ) / 86400)) -exec ls -l '{}' \;


Pozoveš sa:

$ ./program Jun 13


To je neka osnovna ideja, proširi po želji.
int rand(void);

Those who do not understand Unix are condemned to reinvent it, poorly.

Upali lampicu — koristi Jabber!
 
Odgovor na temu

Jbyn4e

Član broj: 422
Poruke: 6049
*.ptt.yu.



+256 Profil

icon Re: Shell - bash Scripta18.10.2007. u 21:44 - pre 162 meseci
Mislim da se tu mislilo na ono vreme koje pise pri ls -l. Najlakse bi bilo:
Code:

# ls - l| grep mesec-dan
tj. za april 12:
# ls - l| grep 04-12
iiliti u skriptu:
# ls - l| grep $1-$2
i poziv skripte sa 
# ./skripta 04 12

(ovo sve ako ne gresim grdno :( )

P.S. Koje vreme se prikazuje uz ls -l? Da li je to modification time, ili access time ili sta?
Kad sve ostalo zakaže, pročitaj uputstvo...
 
Odgovor na temu

niceness
Novi Sad

Član broj: 93992
Poruke: 993



+22 Profil

icon Re: Shell - bash Scripta19.10.2007. u 00:54 - pre 162 meseci
mtime.
 
Odgovor na temu

random
Vladimir Vrzić
Beograd

Član broj: 85
Poruke: 3866
*.smin.sezampro.yu.

Sajt: www.last.fm/user/vrza


+4 Profil

icon Re: Shell - bash Scripta19.10.2007. u 14:28 - pre 162 meseci
Ljupče, grešiš grdno :o). Ta ideja nije dobra, a uz to i ne radi. Da li si uopšte probao to što si napisao? Da li uopšte znaš kako tačno izgleda output komande ls -l? Pored toga, šta ako se to što grep-uješ sadrži u imenu fajla? Morao bi da budžiš neki tamo regexp itd. koji ti opet ne bi garantovao ništa. Ako malo razmišljaš u tom pravcu videćeš da je komplikovano da takva budževina bude iole fail safe.

Pored toga, jedno opšte pravilo u programiranju, a koje naravno važi i za skripting: nikad nemoj da se u svom kodu oslanjaš na neku funkcionalnost drugog programa ili biblioteke/API-ja koja nije dobro i strogo definisana. Output komande ls -l nije strogo definisan POSIX-om, i po pravilu ga ne treba nikada parsirati (mada je ovo česta početnička greška).
int rand(void);

Those who do not understand Unix are condemned to reinvent it, poorly.

Upali lampicu — koristi Jabber!
 
Odgovor na temu

cisco89

Član broj: 160062
Poruke: 89
..2-tull-pth.comindico.com.au.



+9 Profil

icon Re: Shell - bash Scripta19.10.2007. u 14:59 - pre 162 meseci
random nazalost skripta neradi

jel ima iko ikakve tutoriale za Osnovno Shell Scriptovanje
 
Odgovor na temu

random
Vladimir Vrzić
Beograd

Član broj: 85
Poruke: 3866
*.smin.sezampro.yu.

Sajt: www.last.fm/user/vrza


+4 Profil

icon Re: Shell - bash Scripta19.10.2007. u 15:30 - pre 162 meseci
Aj da proverimo.

$ cat >> skripta.sh
MONTH=$1
DAY=$2
find . -mtime $(( ( $(date +%s) - $(date -d "$MONTH $DAY" +%s) ) / 86400 )) -type f -exec ls -l '{}' \;
$ sh skripta.sh oct 15
-rw-r--r-- 1 random users 51 Oct 15 01:08 ./head
-rw-r--r-- 1 random users 12 Oct 15 01:08 ./tail
$


Rekao bih da radi. Eventualno bi trebalo uzeti strožiji kriterijum za mtime koje će find da "hvata" (ako se traži da vreme bude tačno između ponoći željenog datuma i ponoći sledećeg dana). Ovako postoji greška zaokruživanja, nekad će uhvatiti i datum dan pre ili posle željenog.
int rand(void);

Those who do not understand Unix are condemned to reinvent it, poorly.

Upali lampicu — koristi Jabber!
 
Odgovor na temu

random
Vladimir Vrzić
Beograd

Član broj: 85
Poruke: 3866
*.smin.sezampro.yu.

Sajt: www.last.fm/user/vrza


+4 Profil

icon Re: Shell - bash Scripta19.10.2007. u 15:37 - pre 162 meseci
Evo i te ispravke, find ima zgodnu opciju -daystart:

Code:
find . -type f -daystart -mtime $(( ( $(date +%s -d "00:00 today") - $(date -d "$1 $2" +%s) ) / 86400 )) -exec ls -l '{}' \;


Što se tiče tutorijala, googlaj "shell scripting", ima ih gomila. Pokušaj za početak da potpuno razumeš razumeš ovu komplikovanu komandu koja rešava tvoj problem, iz nje može dosta da se nauči :). Npr. postavi sebi pitanja: čemu služi $(( ))?, šta radi $( )?, zašto ovo 86400? itd.

[Ovu poruku je menjao random dana 19.10.2007. u 16:48 GMT+1]
int rand(void);

Those who do not understand Unix are condemned to reinvent it, poorly.

Upali lampicu — koristi Jabber!
 
Odgovor na temu

Jbyn4e

Član broj: 422
Poruke: 6049
*.ptt.yu.



+256 Profil

icon Re: Shell - bash Scripta19.10.2007. u 17:07 - pre 162 meseci
Citat:
random: Ljupče, grešiš grdno :o). Ta ideja nije dobra, a uz to i ne radi. Da li si uopšte probao to što si napisao? Da li uopšte znaš kako tačno izgleda output komande ls -l? Pored toga, šta ako se to što grep-uješ sadrži u imenu fajla? Morao bi da budžiš neki tamo regexp itd. koji ti opet ne bi garantovao ništa. Ako malo razmišljaš u tom pravcu videćeš da je komplikovano da takva budževina bude iole fail safe.

Potpuno si u pravu. Nisam stigao ni da razmislim o tome :) - ali je covek bas pominjao ls -l , pa mi se to nametnulo kao najbrze resenje bez koriscenja find-a. I da, naravno da nisam probao - pisao sam na brznu :*(

Dakle, izgleda da je najbolje random-ovo resenje sa find komandom i njenom exec funkcijom (mada sam je dosad koristio uglavnom za rm -f :) za brisanje fajlova starijih od n dana, meseci...)

P.S. Random, ono so me je ponukalo na ovo je:

~> ls -l
total 3108
drwxr-xr-x 2 xx users 48 2005-09-29 13:45 bin
drwx------ 3 xx users 496 2005-10-07 13:24 Desktop
drwxr-xr-x 2 xx users 80 2005-09-29 13:45 Documents
drwxr-xr-x 3 xx users 72 2005-10-07 13:23 download
...

jer je to izgleda tako definisano da se ispisuje po defaultu kod SuSE-a.
Kad sve ostalo zakaže, pročitaj uputstvo...
 
Odgovor na temu

[es] :: Skript jezici :: Shell - bash Scripta

[ Pregleda: 3868 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.