[ nikmil @ 12.06.2006. 10:10 ] @
Evo olakšanje za sve korisnike Rhythmbox-a Napravio sam skriptu koja kopira muziku na mp3 plejer, a koristi se ovako:

1. U Rhythmboxu se napravi lista pesama i snimi se kao neki fajl
2. Mountuje se mp3 plejer
3. Pozove se skripta
Code:
./sync.sh put_do_playliste put_do_mp3_plejera


Skripta ima još par bugova:
- putanja do playliste mora biti apsolutna (npr. /root/Desktop/playlista , a nipošto ./playlista)
- nisam još uvek dodao opcije randomize i sort, a dodaću i njih i komentare kad budem imao vremena
- imena fajlova sadrže znakove %20, %2C, itd.

Da bi skripta radila potrebna je neka verzija CURL-a.

Code:

#!/bin/sh

cd $2
i=1

for red in $(grep file:// $1)
do
    echo $red
    eval $red
    eval url='$File'$i
    curl -O $url
    i=$(expr $i + 1)
done
[ VRider @ 12.06.2006. 13:29 ] @
Code:

PUT_LISTA=$1;
REZULTAT=`echo $PUT_LISTA | grep -c ^/`;
if [ $REZULTAT -eq 0 ]
then
        PUT_LISTA=`pwd`/$PUT_LISTA;
fi


Sada ce ti raditi i relativne putanje do playliste. Samo umesto $1 koristis $PUT_LISTA.

Mozes da li da zakacis neku mali listicu iz Rythmboxa, da vidim kako ti izgleda, jer stvarno ne vidim cemu curl u celoj ovoj prici. Ti si ga koristio umesto cp, ako sam skapirao, a rekao bih da jesam.
Nece skoditi i ovako nesto na pocetku:
Code:

if [ $# -ne 2]
then
        echo "Upotreba: $0 playlista /putanja/do/playera" 2>&1;
        exit;
fi


Nakon sto sredis putanju do playliste ide:
Code:

if [ ! -s $PUT_LISTA ]
then
        echo "Fajl je postoji!";
        exit;
else if [ ! -r $PUT_LISTA ]
then
        echo "Fajl nije citljiv!";
        exit;
fi


I tako dalje....
[ nikmil @ 14.06.2006. 12:06 ] @
Hvala na savetima, staviću to u skriptu čim budem imao vremena.
Koristio sam curl umesto cp zato što su u playlisti putanje do pesama tipa URL, npr.
file:///My%20Music/neki_fajl.mp3

Pošto nisam znao kako da ovo pretvorim u običnu UNIX-oliku putanju koja bi se mogla koristiti sa cp, koristio sam curl.

Evo jedne playliste:

Code:

[playlist]
NumberOfEntries=4
File1=file:///mnt/share/Dokumenti/My%20Music/muzika/Zabranjeno%20Pusenje%20-%20Best%20of/Zabranjeno%20Pusenje%20-%20Pit%20Bull.mp3
Title1=Pit Bull
File2=file:///mnt/share/Dokumenti/My%20Music/muzika/Zabranjeno%20Pusenje/Zabranjeno%20Pusenje%20-%20Pit%20Bull.mp3
Title2=Pit Bull
File3=file:///mnt/share/Dokumenti/My%20Music/muzika/Zabranjeno%20Pusenje%20-%20Best%20of/Zabranjeno%20Pusenje%20-%20Zeni%20nam%20se%20Vukota.mp3
Title3=Zeni nam se Vukota
File4=file:///mnt/share/Dokumenti/My%20Music/muzika/Zabranjeno%20Pusenje/Zabranjeno%20Pusenje%20-%20Zeni%20nam%20se%20Vukota.mp3
Title4=Zeni nam se Vukota
[ VRider @ 14.06.2006. 13:50 ] @
Obozavam perl!
Code:
$str =~ s/\%([A-Fa-f0-9]{2})/pack('C', hex($1))/seg;

Ti vidi kako ces to da iskoristis.
Ili bolje da ga pises u perlu.
[ nikmil @ 15.06.2006. 08:30 ] @
Samo problem je što ne znam ni p od perl-a. Inače, ovo mi je prva sh skripta :), nešto kao vatreno krštenje :)

Da li bi se ta konverzija kako mogla uraditi u C-u?
[ VRider @ 15.06.2006. 11:22 ] @
Ovako jednostavno ne, ali, moze naravno.
[ random @ 15.06.2006. 21:41 ] @
Ako već radiš Bourne shell, onda je najbolje da koristiš sed za takve stvari.
[ VRider @ 15.06.2006. 21:52 ] @
Koji bi bio sed ekvivalent ovom perl kodu?
[ nikmil @ 16.06.2006. 18:37 ] @
Postoji li u bash-u neka komanda slicna funkciji random(n) u C-u koja daje daje neki broj iz intervala 0...n? Ovo mi treba kako bi dodao opciju randomize.
[ random @ 16.06.2006. 22:30 ] @
@Vrider: zapravo, sad kad razmislim malo o tom problemu, napraviti ekvivalentnu komandu u Bourne shellu pomoću sed-a i standardnih Unix alata bi bilo komplikovano. Lakše bi bilo naređati nekoliko linija tipa:

Code:
echo ${string} | sed '{s/%20/ /g}'


za najčešće karaktere koji se kodiraju (razmak, &, ', ", itd), ili sve to staviti u jedan sed skript, a radilo bi posao.

Ako je cilj portabilnost, pomoću perl-a ili na drugi način bi se mogao lako generisati sed skript koji pokriva celu ascii tabelu i koji je ekvivalentan tvom perl one-lineru :).

@nikmil: Svaki put kad referenciraš promenljivu $RANDOM, bash generiše pseudoslučajan broj između 0 i 32767 i vrati njegovu vrednost. Vidi manual za detalje oko inicijalizacije seed-a i sl.

[Ovu poruku je menjao random dana 17.06.2006. u 00:03 GMT+1]
[ random @ 16.06.2006. 23:13 ] @
@Vrider: primer generisanja sed skripta (samo za printable karaktere) u perlu:

$ perl -e 'for ($i = 32; $i < 127; $i++) { print "s/%" . sprintf ("%x", $i) . "/\\x" . sprintf ("%x",$i) . "/g\n"; }' > skript.sed


Ali isti posao se može uraditi i u običnom Bourne shellu!

$ for i in `seq 32 126`; do echo -n "s/%"; printf "%x" $i; echo -n "/\\x" ; printf "%x" $i; printf "/g\n"; done > skript.sed


Kada sve to predamo sed-u dobijamo rešenje koje si tražio (u čistom Bourne shellu, ne mora da bude bash ;o)):

Code:
str=$(echo $str | sed "{$(for i in `seq 32 126`; do echo -n "s/%"; printf "%x" $i; echo -n "/\\x" ; printf "%x" $i; printf "/g\n"; done)}")


Ipak nije bilo toliko komplikovano kako sam na trenutak pomislio da će biti, barem što se tiče količine koda.

[Ovu poruku je menjao random dana 17.06.2006. u 00:24 GMT+1]
[ VRider @ 17.06.2006. 02:08 ] @
To, bejbi.
Nisam ni sumnjao da ima neki liner.