Bash rekurzivno putovanje direktorijima

Razmjena savjeta i trikova o podešavanju sustava i programa.

Moderator/ica: Moderatori/ce

demaxfa
Postovi: 37
Pridružen/a: 17 ožu 2012, 09:27

Bash rekurzivno putovanje direktorijima

Post Postao/la demaxfa »

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

Darko
Avatar
Cooleech
Moderator
Postovi: 7025
Pridružen/a: 13 stu 2010, 21:12
Spol: M
OS: Arch Linux KDE
Lokacija: /hrvatska/solin/

Re: Bash rekurzivno putovanje direktorijima

Post Postao/la Cooleech »

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.
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 time, but you man... you're special!
Avatar
4ndY
Moderator
Postovi: 4060
Pridružen/a: 15 svi 2008, 18:05
Spol: M
OS: Fedora/KDE
Lokacija: Hamburg, DE
Kontakt:

Re: Bash rekurzivno putovanje direktorijima

Post Postao/la 4ndY »

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.'
demaxfa
Postovi: 37
Pridružen/a: 17 ožu 2012, 09:27

Re: Bash rekurzivno putovanje direktorijima

Post Postao/la demaxfa »

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
Avatar
4ndY
Moderator
Postovi: 4060
Pridružen/a: 15 svi 2008, 18:05
Spol: M
OS: Fedora/KDE
Lokacija: Hamburg, DE
Kontakt:

Re: Bash rekurzivno putovanje direktorijima

Post Postao/la 4ndY »

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, dana/u 23 svi 2013, 14:09, ukupno mijenjano 1 put.
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
tomog999
Postovi: 125
Pridružen/a: 03 ožu 2011, 18:18
Spol: M
OS: mint14Cina/Centos6
Lokacija: Zagreb

Re: Bash rekurzivno putovanje direktorijima

Post Postao/la tomog999 »

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
4ndY
Moderator
Postovi: 4060
Pridružen/a: 15 svi 2008, 18:05
Spol: M
OS: Fedora/KDE
Lokacija: Hamburg, DE
Kontakt:

Re: Bash rekurzivno putovanje direktorijima

Post Postao/la 4ndY »

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.'
demaxfa
Postovi: 37
Pridružen/a: 17 ožu 2012, 09:27

Re: Bash rekurzivno putovanje direktorijima

Post Postao/la demaxfa »

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$ 
Avatar
4ndY
Moderator
Postovi: 4060
Pridružen/a: 15 svi 2008, 18:05
Spol: M
OS: Fedora/KDE
Lokacija: Hamburg, DE
Kontakt:

Re: Bash rekurzivno putovanje direktorijima

Post Postao/la 4ndY »

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.'
demaxfa
Postovi: 37
Pridružen/a: 17 ožu 2012, 09:27

Re: Bash rekurzivno putovanje direktorijima

Post Postao/la demaxfa »

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
Odgovori