Sada je: 10 pro 2019, 00:08.
Razmjena savjeta i trikova o podešavanju sustava i programa.

Moderator/ica: Moderatori/ce

Kako napisat bash skriptu da proputuje direktorije obavi zadatak koji je u skripti i vrati se u dir iz kojeg je pokrenuta??

Darko
Postovi: 34
Postovi: 34
Pridružen/a: 17 ožu 2012, 09:27
Podijelio/la zahvalu: 1 puta
Primio/la zahvalu: 2 puta
Ručno, tipkajući kod. :mrgreen:
Šalu na stranu, što ti skripta treba napraviti u svakom od direktorija? Malo bolje opiši što želiš od nje, nismo vidoviti.
Arch Linux Install Script
Hash Checker
Vl@do je napisao/la:Arch imaš upravo zato da uštediš na vremenu. Nemaš nikakvih problema s instalacijama, kompajliranjem i ostalim. Imaš jednostavno funkcionalan i stabilan, uvijek najsvježiji OS, a osim toga je sexy i cool do neba.

I've seen some idiots back in my days but you man... you're special!
Avatar
Moderator
Postovi: 6247
Moderator
Postovi: 6247
Pridružen/a: 13 stu 2010, 21:12
Lokacija: /hrvatska/split/.../9/7
Podijelio/la zahvalu: 266 puta
Primio/la zahvalu: 323 puta
Spol: M
OS: Arch MATE/Xfce
demaxfa je napisao/la:Kako napisat bash skriptu da proputuje direktorije obavi zadatak koji je u skripti i vrati se u dir iz kojeg je pokrenuta??

Darko


Rekurzivno "hodanje" po svim datotekama svih poddirektorija možeš dobiti s find i xargs
Kod: Označi sve
find . -type f | xargs "naredba"


Beskoristan primjer, ali ilustrativan:
Kod: Označi sve
find . -type f | xargs grep "GPL"

isto je kao
Kod: Označi sve
 grep -r "GPL" *
A neutron walks into a bar; he asks the bartender, 'How much for a beer?' The bartender looks at him, and says 'For you, no charge.'
Avatar
Moderator
Postovi: 4059
Moderator
Postovi: 4059
Pridružen/a: 15 svi 2008, 18:05
Lokacija: Hamburg, DE
Podijelio/la zahvalu: 111 puta
Primio/la zahvalu: 183 puta
Spol: M
OS: Fedora/KDE
Mora izbrisat ove znakove iz naziva mht mhtml datoteka | : ? našao sam riješenje na grupama za skriptu ali do sad sam je copy/pastao u svaki dir i pod dir pa pokretao rućno sad bih da u glavnom dir izdam naredbu a da ona sama proputuje dir i da napravi što treba.
Kod: Označi sve
#!/bin/bash
# renames.sh
# basic file renamer


   for i in *.mht
   do
   j=`echo $i | sed 's/|/ /g' | sed 's/:/ /g' | sed 's/?//g' | sed 's/"//g'`
         mv "$i" "$j"

         done
Postovi: 34
Postovi: 34
Pridružen/a: 17 ožu 2012, 09:27
Podijelio/la zahvalu: 1 puta
Primio/la zahvalu: 2 puta
Evo jedan oneliner :-)
Kod: Označi sve
find . -type f -name "*.mhtml" -o  -type f -name "*.mht" | xargs -I item sh -c '{ echo item; echo item | sed "s/[:?|]//g"; }' | xargs -n2 mv


Objašnjenje:
* find nam traži sve datoteke ( -type f ) s nastavkom .mht ili ( -o ) .mhtml
* xargsom nađeno findom supstituiramo varijablom item ( -I item )
* sh-om izvršavamo dvije naredbe, prva je jednostavno ispis f-a ( echo item ), a druga je sed-an item ( echo item | sed "s/[:?|]//g" )
* šaljemo dakle dva stringa odvojena razmakom ( običan item i sed-an item ) zadnjem xargsu koji prima dva argumenta za mv

Sed: "s/[:?|]//g": s - "search and replace", [:?|] skup znakova, g - sva pojavljivanja u liniji
Zadnja izmjena: 4ndY; 23 svi 2013, 14:09; ukupno mijenjano 1 put/a.
Razlog: Promijenio "f" u "item" da ne bi bilo zabune.
A neutron walks into a bar; he asks the bartender, 'How much for a beer?' The bartender looks at him, and says 'For you, no charge.'
Avatar
Moderator
Postovi: 4059
Moderator
Postovi: 4059
Pridružen/a: 15 svi 2008, 18:05
Lokacija: Hamburg, DE
Podijelio/la zahvalu: 111 puta
Primio/la zahvalu: 183 puta
Spol: M
OS: Fedora/KDE
Možda bi bilo bolje da si stavio neki drugi naziv varijable xargsu umjesto "f",
jer moglo bi se pogrešno zaključiti (mislim na ekipu sa manje iskustva) da "f" od finda i xargsa imaju veze jedno s drugim, tj. da moraju biti isti.
To all you "rvacki pravopis" haters, we're gona blow your planet up
we got death star(death star)
and you know that we got it(death star)

Darth Spellingius :D
Avatar
Postovi: 125
Postovi: 125
Pridružen/a: 03 ožu 2011, 18:18
Lokacija: Zagreb
Podijelio/la zahvalu: 2 puta
Primio/la zahvalu: 6 puta
Spol: M
OS: mint14Cina/Centos6
tomog999 je napisao/la:Možda bi bilo bolje da si stavio neki drugi naziv varijable xargsu umjesto "f",
jer moglo bi se pogrešno zaključiti (mislim na ekipu sa manje iskustva) da "f" od finda i xargsa imaju veze jedno s drugim, tj. da moraju biti isti.


Imaš pravo, promijenio sam iz "f" u "item".

Napustila me bila kreativnost da smislim bolji naziv u tom momentu kad sam pisao gornji oneliner :zvizdi
A neutron walks into a bar; he asks the bartender, 'How much for a beer?' The bartender looks at him, and says 'For you, no charge.'
Avatar
Moderator
Postovi: 4059
Moderator
Postovi: 4059
Pridružen/a: 15 svi 2008, 18:05
Lokacija: Hamburg, DE
Podijelio/la zahvalu: 111 puta
Primio/la zahvalu: 183 puta
Spol: M
OS: Fedora/KDE
Javlja sljedeču grešku pokušao sam zamijenit " sa ' ali onda javlja druge greške??

Kod: Označi sve
darko@debian:~/Web$ ./ren
xargs: unmatched jednostruki quote; by default quotes are special to xargs unless you use the -0 option
mv: missing file operand
Try `mv --help' for more information.
darko@debian:~/Web$
Postovi: 34
Postovi: 34
Pridružen/a: 17 ožu 2012, 09:27
Podijelio/la zahvalu: 1 puta
Primio/la zahvalu: 2 puta
Ne razumijem, koje si navodnike pokušao zamijeniti i zašto?
A neutron walks into a bar; he asks the bartender, 'How much for a beer?' The bartender looks at him, and says 'For you, no charge.'
Avatar
Moderator
Postovi: 4059
Moderator
Postovi: 4059
Pridružen/a: 15 svi 2008, 18:05
Lokacija: Hamburg, DE
Podijelio/la zahvalu: 111 puta
Primio/la zahvalu: 183 puta
Spol: M
OS: Fedora/KDE
cim sam copy pastao i pokrenu ./ren izbacio mi je ovu grešku nakon toga sam probao zamjeniti " sa ' i ' sa " i urznim kombinacijam ali je svaki put javljao drug grešku
Postovi: 34
Postovi: 34
Pridružen/a: 17 ožu 2012, 09:27
Podijelio/la zahvalu: 1 puta
Primio/la zahvalu: 2 puta

Na mreži
Trenutno korisnika/ca: / i 1 gost.