» »

Skripte

Skripte

«
1
2

Microsoft ::

Zdele sem dobil idejo, da bi naredil topik, v katerem bi skupaj zbrali uporabne in malo manj uporabne skripte, jih komentirali, izbolševali. Če bi kdo rabil kako skriptno rešitev, bi lahko skupaj stopli, pa naredil kaj uporabnega, objavili in naredili dostopno za ostale, ki jih to zanima.
Držali bi se recimo čisto preprostega pravila objavljanja. Skripte naj bodo namenjene samo za operacisjki sistem, tako da so web skripte izključene (to naj gre pod Izdelavo internetnih strani). Pa tudi kakih irc skript za tejkanje in podono navleke ne bi objavljali. In vsak, ki bi objavil skripto, bi izpolnil nek header, da bi lahko na hitro pregledali, čemu je skripta namenjena, kaj dela, kje dela, kako dela.
Kasneje, ko je skripta objavljena, se jo lahko komentira. Recimo, če kdo pride do težav pri uporabi, kako bi se jo dalo izboljšati, odpravljanje pomankljivosti in podobno.

Ste za to?


by Miha
s8eqaWrumatu*h-+r5wre3$ev_pheNeyut#VUbraS@e2$u5ESwE67&uhukuCh3pr

Microsoft ::

Operacijski: Windows
Jezik: VBScript
Datoteka: script_hd_file_ext.txt
Vmesnik: Command Prompt
Kratek opis: Dobiti vse poti dodatotek z doloceno koncnico. Skripta gleda za datotekami samo na lokalnih diskih. Recimo, Network Drive in CD ne pregleda. Vsakic, ko najde doloceno pot do datoteke z koncnico, jo izpise. Na koncu se izpise stevilo vseh datotek.
Uporaba: Datoteki se spremeni koncnica txt v vbs. Potem pa odpres Command Prompt, se z ukazom cd imemape premaknes do mape, kjer je ta skripta. Ko si tam, napises ukaz cscript imeskripte.vbs.


by Miha
s8eqaWrumatu*h-+r5wre3$ev_pheNeyut#VUbraS@e2$u5ESwE67&uhukuCh3pr

Zgodovina sprememb…

BigWhale ::

Se GNU/Linux verzija tvoje skripte:

#!/bin/sh

find / -type f -iname "*.$1" -printf "%u:%g %10s %h/%f\n" | \
awk 'BEGIN { cnt = 1 } { print; cnt++ } END { print "Total files: " cnt }'


Uporaba:

skripta lol

poisce vse datoteke, ki imajo koncnico *.lol

PS: Sem dal v dve vrstici, da ni threada zjebal...

Zgodovina sprememb…

  • spremenil: BigWhale ()

OwcA ::

@Microsoft: en prijazen nasvet. Nuči se kakšen spodoben skriptni jezik. Da je VB zanič bi težko bolj nazorno pokazal. 40+ polnih vrstic, to ni več skripta, ampak aplikacija. ;)
Otroška radovednost - gonilo napredka.

OwcA ::

Da ne bom samo provuciral, ista namebnost, boljša rešitev. ;)

Namreč:

1) stvar bi naj bila povsem platformsko neodvisna (kar sicer nanese 50 % dodatne kode ... :()
2) pod win32 prepleza čez vse diske od a do z (dobesedno)

Python:
import os
import sys

count = 0
for drive in os.path.splitdrive(os.getcwd())[0] and [chr(drive_letter)+ ':' for drive_letter in range(97, 123)] or ['/']:
	try:
		os.chdir(drive)
	except OSError:
		pass
	else:
		for dirpath, _, filenames in os.walk(drive):
			filtered = [os.path.join(dirpath, filename) for filename in filenames if os.path.splitext(filename)[1] == '.' + sys.argv[1]]
			count += len(filtered)
			print '\n'.join(filtered)
print 'Skupaj datotek: ' + count

Če bi si zelo želel, bi lahko eleminiral še kašno vrstico, ampak potem bi to zahtevalo več kot 2 min dela, kar je za skripto nadvse neokosuno.
Otroška radovednost - gonilo napredka.

Zgodovina sprememb…

  • spremenilo: OwcA ()

64202 ::

MSja verjetno skrbi, da python ni true "sistemska" resitev. Da temu ni tako, prica ta link:
ActiveState Community - Boosting coder and team productivity with ready-to-use open source languages and tools.
I am NaN, I am a free man!

OwcA ::

Hehe, z PyWin32 sploh ne bi bilo izziva. win32file.FindFilesW() ;)
Otroška radovednost - gonilo napredka.

64202 ::

Ne mores verjet, sem bral specifikacijo za C# 3.0 in ugotovil, da naj bi po novem imel pythonov yield (generatorji & stuff) 8-O - klik, klik2. Sem ze malo offtopic? :)
I am NaN, I am a free man!

Zgodovina sprememb…

  • spremenilo: 64202 ()

WarpedGone ::

Isto kot MS skripta doseže tut naslednji ukaz:

C:\dir /s /b *.exe

Če hočeš met spisek v fajlu, ga tja pač preusmeriš:

C:\dir /s /b *.exe >list.txt

Razlika je le, da se omeji na en sam disk in da na koncu ne izpiše števila zadetkov. Big deal.
Zbogom in hvala za vse ribe

Road Runner ::

ls -R / | grep '.foo'


fijuuu :>
http://dusan.fora.si/blog/ (742617000027)

Microsoft ::

Operacijski: Windows
Jezik: VBScript
Datoteka: script_system.txt
Vmesnik: Command Prompt
Kratek opis: Izpise vecino strojne opreme in lastnoste te strojne opreme. Recimo, procesor, ram, disk, graficna. Izpise recimo njihova imena, velikost, frekvenco, proizvajalca in podobno.
Uporaba: Datoteki se spremeni koncnica txt v vbs. Potem pa odpres Command Prompt, se z ukazom cd imemape premaknes do mape, kjer je ta skripta. Ko si tam, napises ukaz cscript imeskripte.vbs.

Mim grede, vem da obstajajo tud ukazi za Command Prompt in podobno, sam bi blo bol kul, da bi zbiral skripte, kot pa ukaze.


by Miha
s8eqaWrumatu*h-+r5wre3$ev_pheNeyut#VUbraS@e2$u5ESwE67&uhukuCh3pr

Zgodovina sprememb…

OrkAA ::

Ni res.

64202 ::

Zabavno bo videt MSH, ko bodo skripte hkrati ukazi in ukazi hkrati skripte. (tukaj je en smajli, ki se s kladivom tolce po glavi) :))
I am NaN, I am a free man!

Road Runner ::

cat /var/log/dmesg

(za tiste ki ste na linux in ne morate uporabiti microsoftove skripte)

fijuuu :>
http://dusan.fora.si/blog/ (742617000027)

Zgodovina sprememb…

darkolord ::

Racer_D: meni dmesg ne izpiše recimo serijskih številk, firmwareov, velikokrat celo proizvajalca ne, pa za RAMe mi sploh ne pove v katerih slotih so (in kateri sloti so prazni). Hecno.

Owca: kaj pe če pri tisti tvoji skripti hočeš, da je to res disk (oz particija) in ne cdrom, disketnik, mrežni pogon... in da gre tudi čez particije brez črke?

Zgodovina sprememb…

OwcA ::

Potem uporabiš PyWin32 in se odpoveš prenosljivosti.
Otroška radovednost - gonilo napredka.

kriko1 ::

...meni dmesg ne izpiše recimo serijskih številk, firmwareov, velikokrat celo proizvajalca ne, pa za RAMe mi sploh ne pove v katerih slotih so (in kateri sloti so prazni). Hecno.

#lspci
in
#lsusb

dmesg, je log od kernel-a. Za poljši izpis se uporabi grep, npr.:

#lspci | grep SATA

darkolord ::

lspci mi izpiše približno tolko kot osnovni pogled v Device Managerju

kriko1 ::

#lspci -v

Vredno si je ogledat tudi /proc npr:
/proc/ide/ide0/hda/settings
mi vrže ven info o mojem dvd-rwju.

Zgodovina sprememb…

  • spremenil: kriko1 ()

64202 ::

Za particije pozenes mount, da ves kam so namontirane, potem ima pa find parameter -mount, ki pove, da naj ne gre preko mej particij. Tako bi to slo v shellu...
I am NaN, I am a free man!

64202 ::

Se pa splaca preden gres kaj resnega skriptat se v perlov cpan pogledat in lahko najdes tole:
Sys::Filesystem - Retrieve list of filesystems and their properties - metacpan.org

Perl je namrec hudicevo mocna stvar in v takih nekaj vs nekaj pogovorih ponavadi vse 0wna :D
I am NaN, I am a free man!

64202 ::

Eh, pa saj je brezveze take low level sistemske stvari direkt primerjat... na unixih so particije (ce jih imas) ze same po sebi razdeljene po namembnosti, potem fajli ponavadi nimajo koncnic, moras uporabit program file, ki ti vrne tip, etc. V resnici, ce bi izbral na unixu pristop mount, bi zdaj lahko rekel windowsacem, da moja skripta dela vec. Namrec, una win skripta ne uposteva NTFS junction pointov.
I am NaN, I am a free man!

64202 ::

Bom pasteal en zanimiv ukaz/skripto :), sem hotel zdownloadati vse .avi fajle z neke strani. To se da naresti tako:

link=' Project MAC Home Page'
wget -O - $link | tidy -f /dev/null --output-xml yes | xml sel -t -m '//a' -v '@href' -n | grep '\.avi$' | while read file; do wget -c "$link/$file"; done

Pri svojem prijaznem distributerju si zagotovite wget, (html) tidy in xmlstarlet. Download se da s ^C prekinit in kasnej nadaljevat, seveda.
I am NaN, I am a free man!

kriko1 ::

wget -O - $link | tidy -f /dev/null --output-xml yes | xml sel -t -m '//a' -v '@href' -n | grep '\.avi$' | while read file; do wget -c "$link/$file"; done

Zanimivo, kar pod “notes„ to leti. Mene pa zanima če bi se dalo naslednje:
z ukazom:
#ls /home/kriko > ~/Desktop/lsHome
sem zapisal vsebino mape home, datoteko sem pozneje uredil in pustil not mape/datoteke ki jih ne želim več imeti (npr .azureus, .kbomber...)
A se naredit shell skripto ki bi prebrala te vnose, ter nato poskušala:
#rm .vnos
če bi tole spodletelo pa:
#rm -r vnos
?

Vnosi so vsak v svoji vrsici.

edit:
Pravzaprav še boljše če:
bi prebrane vnose pustila, vse ostalo pa izbrisala (bolj handy, ker recimo imaš ene stvari ki jih non-stop uporabljaš).

Zgodovina sprememb…

  • spremenil: kriko1 ()

64202 ::

Rabis xargs, ki spremeni tok podatkov v argumente:
xargs rm -fr < ~/Desktop/lsHome

Samo pazi kaj je v lsHome!! :D
I am NaN, I am a free man!

64202 ::

Se kontra. Dokaj neucinkovito, je pa portable na vsak unix pod soncem. Ve kdo boljso varianto?
ls | while read file; do grep "$file" seznam_fajlov > /dev/null || echo "$file"; done

(mora hendlat presledke v imenih!)
I am NaN, I am a free man!

64202 ::

Hehe, sem na KDE dev. blogu naletel na tole: web publishing with KDE

Namrec, gre se za skripto, ki se sprozi vsakic, ko v nek direktorij na desktopu "vrzes" sliko. Ta slika se potem resize-a na neko max. velikost, skopira na web server in v clipboard se nastavi link, ki ga potem lahko pasteas v IRC/forum/...
I am NaN, I am a free man!

64202 ::

Bugec,
grep "$file" seznam_fajlov
je treba zamenjat v
grep -F "$file" seznam_fajlov
I am NaN, I am a free man!

moj_nick ::

Iščem skripto, ki mi bo v PHP kodi vse definirane metode znotraj razreda razvrstila po abecedi. Kompatibilno z Linuxom seveda.
110111001001010001010000

kriko1 ::

Kako pa bi lahko realiziral skripto ki bi na oddaljenem računalniku odpirala kde okna z poljubnimi sporočili?
Primer:

Prijavi bi se z:
#ssh -l ime 192.168.0.2

in nato bi tipkal, vsakič ko bi prtisnu enter, bi izvedlo:
kdialog --title "ni pomembno" --msgbox "vnešen niz"

To bi se ponavljalo dokler ne bi pritisni ctrl+c.

Problem je še ker prek ssh-ja ko hočeš pognat kdialog reče: cannot connect to X server.

CCfly ::

X forwarding vklopi v nastavitvah za sshd in pri odjemalcu pa bo šlo.
"My goodness, we forgot generics!" -- Danny Kalev

64202 ::

ssh -X -l ime 192.168.0.2 'while read line; do kdialog --title "ni pomembno" --msgbox "$line"; done'

:)
I am NaN, I am a free man!

64202 ::

Aja, ti bi verjetno rad na remote kisti odprl okna? Okay:

ssh -l ime 192.168.0.2 'export DISPLAY=:0; while read line; do kdialog --title "ni pomembno" --msgbox "$line"; done'
I am NaN, I am a free man!

kriko1 ::

Tnx, grem sprobat!

kriko1 ::

En problemček še, rešitev deluje, le če se prek ssh-ja prijaviš kot user, pod katerim tečejo trenutno X-i, drugače:
Xlib: connection to ":0.0" refused by server
Xlib: No protocol specified

kdialog: cannot connect to X server :0

Kako bi delalo, recimo če je prijavljen ’miha‘ in jaz se prijavim kot ’tone‘ prek ssh?

64202 ::

Kot root pozeni:

cp /home/miha/.Xauthority /home/tone/
chown tone /home/tone/.Xauthority
I am NaN, I am a free man!

realmojo ::

Lep pozdrav,

OwcA, glede tvoje python skripte, eno vprasanje: ne stekam poanto uporabe operatorja 'and', v tejle vrstici:

for drive in os.path.splitdrive(os.getcwd())[0] and [chr(drive_letter)+ ':' for drive_letter in range(97, 123)] or ['/']:


Sem sel iz firbca v python interpretorju se malo igrat z iteriranjem in and/or-i in sem dobil sledece rezultate:


>>> for a in [1, 2, 3] or [4, 5]: print a;
...
1
2
3
>>> for a in [] or [4, 5]: print a;
...
4
5
>>> for a in [1, 2, 3] and [4, 5]: print a;
...
4
5
>>> for a in [] and [4, 5]: print a;
...
>>> for a in [1, 2, 3] and []: print a;
...
>>>


Za 'or' nisem vedel da je mozno uporabit, in se mi zdi uporabna stvar (vzame prvega, ce je prazen vzame drugega, itn.).
Za 'and' pa ne stekam poante; a je mogoce ta prvi del pred and-om samo iz varnosti, ali...

Hum, zdejle sem se enkrat pogledal, in se mi zdi da vem kje je catch: "for x in a and b or c" sta a in b za windows, ce pa je pogoj False, pa pride notri c, ki je '/' - Linux.

lp,
jure

Zgodovina sprememb…

  • spremenil: realmojo ()

OwcA ::

Hum, zdejle sem se enkrat pogledal, in se mi zdi da vem kje je catch: "for x in a and b or c" sta a in b za windows, ce pa je pogoj False, pa pride notri c, ki je '/' - Linux.

Tako je. Oziroma, če a, potem vrne b, drugače c. To je precej podobno kot C-jevski (cond) ? (exp1) : (exp2), paziti je treba le na to, da ni čisto vseeno kakšen je b. Če bi bil karkoli, ki kot boolean zasede vrednost false (recimo 0, ali prazen list) potem bo stvar delala "narobe".
Z Pythonom 2.5 dobimo tudi pravi "ternary" izraz.
Otroška radovednost - gonilo napredka.

realmojo ::

Z Pythonom 2.5 dobimo tudi pravi "ternary" izraz.


Iz python proposal-ov:


Adding a conditional expression

On 9/29/2005, Guido decided to add conditional expressions in the
form of "X if C else Y". [1]

The motivating use case was the prevalance of error-prone attempts
to achieve the same effect using "and" and "or". [2]


Pa res :)

Ok, dodajam se jst eno "uporabno" skripto, da ne bom off-topic (ce se komu zahoce sortiranja - znameniti qicksort algoritem v pythonu, iz wikipedije):

def qsort(L):
	 if L == []: return L
	 return qsort([x for x in L[1:] if x< L[0]]) + L[0:1] + qsort([x for x in L[1:] if x>=L[0]])


(vem, obstaja list.sort(), ampak point je drugje.)

lp,
jure

Zgodovina sprememb…

  • spremenil: realmojo ()

CaqKa ::

>>> Mim grede, vem da obstajajo tud ukazi za Command Prompt in podobno, sam bi blo bol kul, da bi zbiral skripte, kot pa ukaze.

in zakaj bi ti raje uporabil skripto če pa lahko z ukozaom in ustreznimi switchi to prej narediš?

OwcA ::

Ker potem to hočeš nekoč nekdaj avtomatizirati in na koncu imaš eno golomazno skripto, ki samo obdeluje klice nekih lupinskih ukazov. Grdo.
Otroška radovednost - gonilo napredka.

darkolord ::

Al pa samo obdeluješ neke stringe. To je grdo. :P

Zgodovina sprememb…

  • spremenilo: darkolord ()

64202 ::

Eh, obcutljivi pussyji, perl5 je grd. Za perl6 bo pa itak treba novo besedo izumt :D
I am NaN, I am a free man!

darkolord ::

Govorimo o notranji grdoti :D :D

64202 ::

Notranje lep je itak edino haskell :)

(& prolog...)
I am NaN, I am a free man!

Zgodovina sprememb…

  • spremenilo: 64202 ()

Pithlit ::

Sicer dvomim da bo zadeva komu koristila ampak... ko smo že pri skriptah. ape2mp3 bash script izvede batch konverzijo Monkey Audio datotek v WAV in nato mp3 format. Tagi se sicer izgubijo, ker trenutno na Linux platformi direktna konverzija iz ape v mp3 ni mogoča. Gre le ape -> wav -> mp3/ogg/whatever.

Howto convert ape to wav/mp3/ogg on Linux pa priporočeno branje za vsakogar, ki tako konverzijo potrebuje.
Life is as complicated as we make it...

64202 ::

Zdajle sem moral narest en tak xyz gigabajten backup iz masine A na B preko lokalne mreze. Se mi zdi uporaben trik, ker ni nobenih temporary fajlov in sem zraven dal se on-the-fly racunanje md5 podpisa na obeh koncih (izpise se po koncu kopiranja).

Na masini B najprej pozenes tcp server na portu 5000:
netcat -l -p 5000 | tee >(md5sum >&2) > backup.tar

Na masini A pa priklopis backup direktno na port 5000 od masine B:
tar cv * | tee >(md5sum >&2) | netcat ip_od_B 5000



Varna varianta s ssh in kompresijo bi pa sla takole (md5 se na remote kisti shrani v fajl md5):
tar cvz * | tee >(md5sum >&2) | ssh ip_od_B 'tee >(md5sum > md5) > backup.tar.gz'
I am NaN, I am a free man!

Microsoft ::

Operacijski sistem: Windows Server 2003
Jezik: VBScript
Datoteka: RegistryDoS.txt
Vmesnik: Command Prompt
Kratek opis: Namen te skripte je spremeniti nekatere nastavitve z namenom omiliti DoS napade.
Uporaba: Datoteki spremenite koncnico v vbs in jo pozenete z ukazom cscript skipta.vbs.


by Miha
s8eqaWrumatu*h-+r5wre3$ev_pheNeyut#VUbraS@e2$u5ESwE67&uhukuCh3pr

M4T3J ::

Zdravo.Imam en problem in sicer prvic se srecam z pisanjem skript.Poznam ciste osnove kaj vec pa tudi ne.No zdaj pa imam v soli nalogo da v bash interpreterju napišem skripto ki v določenem kazalu vse zbirke preimenuje v zbirke z končnico old.nato pa še inverzno skripto ki odstrani koncnico old.Ali mi lahko pomagate priti do resitve.Ni potrebno podati resitve samo potek kako bi se tega lotil.Hvala ze vnaprej
Ni nam lahko!

BigWhale ::

Miha,

Lepo bi bilo, da bi pokomentiral kaj pocne tvoja skripta v sami skripti sami. Vrstico po vrstico.

> PS: Sem dal v dve vrstici, da ni threada zjebal...

Bemtis! Lejte kaj sem jaz naredil! Se vi to pocnite!

Zgodovina sprememb…

  • spremenil: BigWhale ()
«
1
2


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Postavitev mySQL

Oddelek: Programiranje
92084 (1662) M01O
»

batch fajl iz txt (strani: 1 2 )

Oddelek: Programiranje
658852 (7513) b3D_950
»

VBS skripta za IP nastavitve

Oddelek: Programiranje
373305 (2819) Malajlo
»

Debian Gnu/Linux kot workstation (strani: 1 2 3 437 38 39 40 )

Oddelek: Operacijski sistemi
1960117186 (32860) RedDrake
»

problem z linuxom (rabim cimprej prosim)

Oddelek: Operacijski sistemi
111384 (1200) Isotropic

Več podobnih tem