Re: shell skripta ne radi

Poslao slobodan on 23.09.2008 12:28:24
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.

Re: shell skripta ne radi

Poslao slobodan on 23.09.2008 12:32:18
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.

Re: shell skripta ne radi

Poslao v-v on 23.09.2008 12:42:43
Budem, zahvaljujem na opaskama

Re: shell skripta ne radi

Poslao gigolo on 28.10.2008 10:28:51
#!/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.

Ova poruka je od: http://www.linux.hr/newbb/viewtopic.php?forum=8&topic_id=1889