Prijava
Korisničko ime:

Lozinka:

remember me

Zaboravili lozinku?

Registrirajte se!
Glavni menu
Potraga
Tko je online
11 korisnika je online (7 korisnika cita Diskusije)

članovi: 0
Gosti: 11

više...
HULK-Diskusije - Programiranje - shell skripta ne radi
Chat WIKI Kontakt
HULK Forum Index
   Programiranje
  shell skripta ne radi

Pregledavanje ovog Threada:   1 Anonimnih Korisnika

 

 Dno   Prethodna tema   Sljedeca tema
12>
  •  Ocjena Threada
      Ocijenite ovaj Thread
      Izvrsno
      Dobro
      Prosjecno
      Loše
      Užasno
Pošiljatelj Thread
Re: shell skripta ne radi
#14
Linux Master
Pridružen: 29.12.2005
Od Šibenik
Poruke: 788
Level : 25
HP : 0 / 607
MP : 262 / 34386
EXP : 30
Grupa:
Registered Users
Offline
#!/bin/bash
cd Pomocni
valid="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-_./"
find . | while read f
 do
j=1
z=$f
        d=$(echo ${#f})
        while [ $j -lt $d ]; do
               c=$(echo ${f:j:1})
                k=`echo $valid | grep -i "$c"`
                if [ "$k" == "" ]; then
  z=`echo ${z//"$c"/"_"}`
                fi
                let j=j+1
      done
   mv "$f" "$z"
done


Ovo je konačna poboljšana verzija nakon pustog rada.
Ima manu, ako rinejma folder onda ne prepoznaje fajlove u njemu, što je logično jer je path izmjenjen. Treba je pustiti nekoliko puta u ovisnodti o broju nivoa podfoldera ili smisliti nešto pametnije.
VAŽNO: Ne puštati u /home ili /home/user jer zezne skrivene sistemske fajlove, već sve što se obrađuje treba staviti u jedan direktorij i u njemu pustiti skriptu.
_________________
-- Davor R. Bergam
Experiments, no experiences!!

Moja web stranica o Linuxu
Postano : 28.10.2008 5:28:51
Izradi PDF od ove poruke Ispis
Vrh
  •  v-v
      v-v
Re: shell skripta ne radi
#13
Padawan
Pridružen: 04.01.2005
Od irc.freenode.net
Poruke: 83
Level : 8
HP : 0 / 176
MP : 27 / 10508
EXP : 6
Grupa:
Registered Users
UrednikNovosti
UrednikLinkova
UrednikDogadjanja
Offline
Budem, zahvaljujem na opaskama
Postano : 23.09.2008 6:42:43
Izradi PDF od ove poruke Ispis
Vrh
Re: shell skripta ne radi
#12
Linux Master
Pridružen: 04.01.2005
Od 33 stupnja i 4 minute sjeverno, i zatim 5 koraka na zapad
Poruke: 2391
Level : 39
HP : 0 / 964
MP : 797 / 57339
EXP : 56
Grupa:
Webmasters
Registered Users
HULK
UrednikNovosti
UrednikRecenzija
UrednikLinkova
ModeratoriForuma
UrednikSekcija
UrednikBlogova
UrednikDogadjanja
UrednikDokumenata
UrednikKomentara
Offline
v-v, i ti isto prouči ABS i find dokumentaciju, jer je tvoj find nepotrebno prekompliciran. Kao prvo, find u sebi ima mogućnost regexp pretraživanja, tako da ti tr ne treba, kao drugo, find može execati naredbu na rezultat, što je brže nego pipe, kao treće, tvoj find radi samo na datotekama, ne i direktorijima.
_________________
Poći ću s vama jer volim šalu, hoću da vidim ježa budalu.

Put u Japan
Postano : 23.09.2008 6:32:18
Izradi PDF od ove poruke Ispis
Vrh
Re: shell skripta ne radi
#11
Linux Master
Pridružen: 04.01.2005
Od 33 stupnja i 4 minute sjeverno, i zatim 5 koraka na zapad
Poruke: 2391
Level : 39
HP : 0 / 964
MP : 797 / 57339
EXP : 56
Grupa:
Webmasters
Registered Users
HULK
UrednikNovosti
UrednikRecenzija
UrednikLinkova
ModeratoriForuma
UrednikSekcija
UrednikBlogova
UrednikDogadjanja
UrednikDokumenata
UrednikKomentara
Offline
Znači, imaš datoteke i direktorije koji sadrže non-ascii znakove, i želiš te znakove zamjeniti sa "_"

Gnome NEMA veze s datotečnim sustavom. Znači, ne tražiš što je ok pod gnomeom nego što je ok pod datotečnim sustavom, u tvom slučaju najvjerojatnije ext3. Gnome je samo jedan od GUIa koji postoje pod linuxom. Riješi se konačno windows razmišljanja.

Naravno da ne znaš što radi ovaj njegov find. Ne znaš u biti ni što radi ta tvoja skripta, koju si frankenštajnski kreirao skupljajući komade po internetu.

Za početak, informiraj se malo o shell skriptama ovdje. Zatim, ako već misliš koristiti naredbu find, informiraj se o njoj tipkanjem

info find

Usput, v-vov find će mjenjati samo datoteke, ne i poddirektorije. I v-v koristi pipe, dok je za ovo dovoljan exec u sklopu find-a.

Najsigurnije je koristiti isključivo ascii znakove za imena datoteka, i eventualno "_" i "." znakiće, s tim da ako ne želiš skrivenu datoteku, nemoj koristiti "." na početku imena datoteke. ASCII znakove regexpom definiramo kao [A-Z][a-z][0-9], odnosno raspon di je znak jedan od ovih.

Pogledaj malo dokumentaciju koju sam ti naveo, imaš gotovih primjera s objašnjenjima, bit će ti sve jasno, a ako ti nešto ne bude jasno, pitaj.
_________________
Poći ću s vama jer volim šalu, hoću da vidim ježa budalu.

Put u Japan
Postano : 23.09.2008 6:28:24
Izradi PDF od ove poruke Ispis
Vrh
  •  v-v
      v-v
Re: shell skripta ne radi
#10
Padawan
Pridružen: 04.01.2005
Od irc.freenode.net
Poruke: 83
Level : 8
HP : 0 / 176
MP : 27 / 10508
EXP : 6
Grupa:
Registered Users
UrednikNovosti
UrednikLinkova
UrednikDogadjanja
Offline
Ispričavam se, mala greškica (tr -cs je pisalo umjesto tr -c) je bila zbog čega je više nečitljivih znakova zamijenjivala sa jednim _ a ne više njih. Slijedeće je u redu:

find . -type f | while read I; do N=$( echo -n $I | tr -c 'a-zA-Z0-9./' '_' ); if [ "$I" != "$N" ]; then echo "$I -> $N"; mv "$I" "$N"; fi done;


No ajmo je onda sistematizirati:

#!/bin/bash
find . -type f | while read I; do 
	N=$( echo -n $I | tr -c 'a-zA-Z0-9./' '_' );
	if [ "$I" != "$N" ]; then
		echo "$I -> $N";
		mv "$I" "$N";
	fi
done;



i proći pojedine dijelove:


find . -type f | while read I; do
Traži fileove te loopa za svaki file. Filename je sadržan u I.

N=$( echo -n $I | tr -c 'a-zA-Z0-9./' '_' );
S echo puštamo početni filne name kroz tr -c koji zamjenjuje svaki znak koji ne matcha a-z A-Z 0-9 . ili / sa _. Echo ima -n parametar jer bi inače dodavao newline znak koji bi nam tr kasnije zamjenio sa _ pa bi nam svaki file imao dodatni _ na kraju, što ne želimo. Novi filename (sa izmijenjenim znakovima) spremamo u varijablu N.


if [ "$I" != "$N" ]; then
	echo "$I -> $N";
	mv "$I" "$N";
fi
Ukoliko početni i završni filename nisu isti (što znači da su imali neželjenih znakova unutra pa ih je gornji red zamjenio) ispišemo korisniku što i gdje renameamo te to učinimo.
Postano : 23.09.2008 6:23:40
Izradi PDF od ove poruke Ispis
Vrh
Re: shell skripta ne radi
#9
Linux Master
Pridružen: 29.12.2005
Od Šibenik
Poruke: 788
Level : 25
HP : 0 / 607
MP : 262 / 34386
EXP : 30
Grupa:
Registered Users
Offline
Stvarno je velika i ne razumijem je. Osim okvirno. Trebao bih znati detaljno šta radi pojedini dio koda.
_________________
-- Davor R. Bergam
Experiments, no experiences!!

Moja web stranica o Linuxu
Postano : 23.09.2008 6:05:45
Izradi PDF od ove poruke Ispis
Vrh
  •  v-v
      v-v
Re: shell skripta ne radi
#8
Padawan
Pridružen: 04.01.2005
Od irc.freenode.net
Poruke: 83
Level : 8
HP : 0 / 176
MP : 27 / 10508
EXP : 6
Grupa:
Registered Users
UrednikNovosti
UrednikLinkova
UrednikDogadjanja
Offline
Citat:
Niz valid se vjerojatno može napisati jednostavnije koristeći [A-Z] i sl, ali mi ne uspjeva.


Evo ti onda umjesto bash skripte jedne veeelike komande

find . -type f | while read I; do N=$( echo -n $I | tr -cs 'a-zA-Z0-9./' '_' ); if [ "$I" != "$N" ]; then echo "$I -> $N"; mv "$I" "$N"; fi done;


Nebih znao koji su sve dozvoljeni znakovi :\
Postano : 23.09.2008 5:54:21
Izradi PDF od ove poruke Ispis
Vrh
Re: shell skripta ne radi
#7
Linux Master
Pridružen: 29.12.2005
Od Šibenik
Poruke: 788
Level : 25
HP : 0 / 607
MP : 262 / 34386
EXP : 30
Grupa:
Registered Users
Offline
Još jedna stvar. Guglao sam za valjanim znakovima za ime fajla/foldera u gnome, ali nisam ništa našao. Ima li još valjanih karaktera da dodam u niz valid?
_________________
-- Davor R. Bergam
Experiments, no experiences!!

Moja web stranica o Linuxu
Postano : 23.09.2008 5:19:20
Izradi PDF od ove poruke Ispis
Vrh
Re: shell skripta ne radi
#6
Linux Master
Pridružen: 29.12.2005
Od Šibenik
Poruke: 788
Level : 25
HP : 0 / 607
MP : 262 / 34386
EXP : 30
Grupa:
Registered Users
Offline
#!/bin/bash
cd test
valid="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-_."
find . | while read f; do
j=1
        d=$(echo ${#f})
        while [ $j -lt $d ]; do
               c=$(echo ${f:j:1})
                k=`echo $valid | grep -i $c`
                if [ "$k" = "" ]; then
                        c="_"
                fi
                r=$r$c
                let j=j+1
      done
  r=$(echo ${r:1:d-2})
#if ["$f" -ne "$r"]; then
 mv "$f" "$r" 
#fi
r=""
done


Ovo radi kako želim. Još bih molio pomoć. Niz valid se vjerojatno može napisati jednostavnije koristeći [A-Z] i sl, ali mi ne uspjeva.
Kod mv sam pokušao dodati da se ne izvršava ali mi if ne radi, pa je u komentaru.
I još najblentavija izjava, ja ovu skriptu ne razumjem. Što je find . | while read f; do
To sam kopirao iz jedne skripte koju sam našao na netu. Ostalo sam guglao za sintaksu naredbi. Unaprijed hvala na pomoći!
_________________
-- Davor R. Bergam
Experiments, no experiences!!

Moja web stranica o Linuxu
Postano : 23.09.2008 4:44:52
Izradi PDF od ove poruke Ispis
Vrh
Re: shell skripta ne radi
#5
Linux Master
Pridružen: 29.12.2005
Od Šibenik
Poruke: 788
Level : 25
HP : 0 / 607
MP : 262 / 34386
EXP : 30
Grupa:
Registered Users
Offline
Hvala na ispravkama. Sam bih to teško napravio, jer se u shell programiranje ne razumijem, a skripta bi trebala rinejmati podfoldere i fajlove tako da zamjeni sve "messy characters" sa "_". Još jednom hvala i nadam se daljnoj pomoći.
_________________
-- Davor R. Bergam
Experiments, no experiences!!

Moja web stranica o Linuxu
Postano : 23.09.2008 3:01:29
Izradi PDF od ove poruke Ispis
Vrh
 Vrh   Prethodna tema   Sljedeca tema
12>

 


 Ne možete pokrenuti novu temu.
 Možete citati teme.
 Ne možete odgovarati na poruke.
 Ne možete uredivati svoje poruke.
 Ne možete brisati svoje poruke.
 Ne možete dodavati nove ankete.
 Ne možete glasati u anketama.
 Ne možete dodavati fileove porukama.
 Ne možete slati poruke bez odobrenja.
Copyright © 1995-2009 HULK web team. Sva prava pridržana. RSS. Engine: XOOPS