Stranica: 1/3.

Bash rekurzivno putovanje direktorijima

Postano: 22 svi 2013, 08:50
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

Re: Bash rekurzivno putovanje direktorijima

Postano: 22 svi 2013, 09:46
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.

Re: Bash rekurzivno putovanje direktorijima

Postano: 22 svi 2013, 18:50
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" * 

Re: Bash rekurzivno putovanje direktorijima

Postano: 23 svi 2013, 08:45
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

Re: Bash rekurzivno putovanje direktorijima

Postano: 23 svi 2013, 09:27
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

Re: Bash rekurzivno putovanje direktorijima

Postano: 23 svi 2013, 11:03
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.

Re: Bash rekurzivno putovanje direktorijima

Postano: 23 svi 2013, 14:11
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

Re: Bash rekurzivno putovanje direktorijima

Postano: 24 svi 2013, 09:53
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$ 

Re: Bash rekurzivno putovanje direktorijima

Postano: 24 svi 2013, 09:57
Postao/la 4ndY
Ne razumijem, koje si navodnike pokušao zamijeniti i zašto?

Re: Bash rekurzivno putovanje direktorijima

Postano: 24 svi 2013, 10:03
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