Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: Sviccc 02 Října 2009, 17:35:06

Název: Prosim o pomoc s vytvorenim skriptu pro automatizaci.
Přispěvatel: Sviccc 02 Října 2009, 17:35:06
Takze muj problem je :

Ve slozce /home/sviccc/hltv/ jsou soubory *.dem a kazdy z nich ma cca 11MB.Chtel bych pomoci skriptu kazdy nove vytvoreny soubor *.dem zkomprimovat na *.tar.bz2.Problem je, ze kazdy soubor se vytvori kazdych 20 minut ale uz od prvni minuty je vytvoreny a az po dokonceni nahravani do tohoto souboru se stane kompletnim.Ve skriptovani sem celkem jeste looser, ale nekde se zacit musi a proto dekuji za jakoukoliv odpoved :)  :P
Název: Re: Prosim o pomoc s vytvorenim skriptu pro automatizaci.
Přispěvatel: starenka 02 Října 2009, 18:58:26
tady mas muj prasopes co ti vezme vsechny *.dem krome nejnovejsiho. v tom cyklu uz to zabalit a smazt zvladnes, co? trochu snahy, hm?
Kód: [Vybrat]
all=(`ls *.dem --sort=t`); for ((i=1;i<${#all[@]};i++)); do echo ${all[$i]}; done
#popravde ale nevim, co to udela, pokud tam ten *.dem bude jen jeden :D
Název: Re: Prosim o pomoc s vytvorenim skriptu pro automatizaci.
Přispěvatel: Martin - ViPEr*CZ* 02 Října 2009, 20:00:02
tady mas muj prasopes co ti vezme vsechny *.dem krome nejnovejsiho. v tom cyklu uz to zabalit a smazt zvladnes, co? trochu snahy, hm?
Kód: [Vybrat]
all=(`ls *.dem --sort=t`); for ((i=1;i<${#all[@]};i++)); do echo ${all[$i]}; done
#popravde ale nevim, co to udela, pokud tam ten *.dem bude jen jeden :D
Super... už my to dnes nemyslí... jsem přemýšlel jak rozlišit, že už se dokončilo zapisování... dalo by se nějak ověřit zda daná aplikace běží... nebo se pokusit provést nějakou radikální změnu se souborem (rename, delete), pokud ho má otevřený (lokovaný) jiná aplikace nepůjde to.... a todle je taky chytrý... cash (počet souborů *.dem)... a pokud se objeví nový předposlední se zabalí... sice to je o krok pozadu... ale taky dobrý...

myšlenka principů se rozšiřuje  ;)
Název: Re: Prosim o pomoc s vytvorenim skriptu pro automatizaci.
Přispěvatel: Sviccc 03 Října 2009, 01:12:54
Mockrat diky za plnohodnotnou odpoved ackoliv jsem to jeste nezkousel, ale verim ze to fungovat bude.A i kdyby ne, pro me je to obrovske nasmerovani a tenhle skript si asi zapamatuju navzdy.Takze dnes to zkusim sesmolit a dam vedet jak na tom moje dovednosti jsou :) ale upozornuju ze jsem hracicka a vydrzim si s tim hrat klidne tyden,mesic,rok atd... :)
Takze jeste jednou diky ;)
Jo a jeste jedna otazecka.Co kdyz uz to zabalene bude a spustim znova skript?nezacne to balit ty stare soubory znovu?
Název: Re: Prosim o pomoc s vytvorenim skriptu pro automatizaci.
Přispěvatel: Martin Kiklhorn 03 Října 2009, 08:51:01
Jen drobné popostrčení - zkuste
Kód: [Vybrat]
file soubor na nezkomprimovaný a zkomprimovaný soubor a najděte podstatný rozdíl.
Název: Re: Prosim o pomoc s vytvorenim skriptu pro automatizaci.
Přispěvatel: Yontalcar 03 Října 2009, 08:57:41
@Svicc
chceš ty soubory jenom komprimovat, nebo i házet do archivu (např. tar; archiv slouží k zabalení dat a metadat množiny souborů do jednoho souboru)? Pokud jenom komprimovat, tak použij jenom bzip2 (nebo gzip, nebo lzma). Tyto programy defaultně po vytvoření archivu původní soubor smažou.
ten jeho 'prasopes' vezme jenom *.dem, *.dem.bz2 už ne

@Viper
ty soubory by asi bylo nejjednodušší testovat přes lsof
rename/delete by teoreticky mohl klidně proběhnout, a přitom by program zapisoval dál do nepojmenované inode
Název: Re: Prosim o pomoc s vytvorenim skriptu pro automatizaci.
Přispěvatel: starenka 03 Října 2009, 10:42:45
Yontalcar: wow! lsof je genialni, tudiz staci tomu taru dat exclude na jemne pogrepovanej lsof na aktualnim adresari a je vymalovano, ne? Dik, neznal jsem
Název: Re: Prosim o pomoc s vytvorenim skriptu pro automatizaci.
Přispěvatel: Sviccc 03 Října 2009, 11:36:40
Tak sem zpet  :P
Myslite si, ze takhle by to mohlo fungovat?

#!/bin/bash
cd /home/sviccc/HLTV/cstrike
all=(`ls *.dem --sort=t`); for ((i=1;i<${#all

Nejlepsi by bylo vysvetlit mi jednotlivy prikazy v retezci.Pochopil sem z toho akorat: vypsat *.dem,seradit podle data,a nakonec vypsat :D

Ale jak ted koukam tak se to nepovedlo jelikoz mi to zabalilo vse.Potreboval bych nejaky chytry text, kde bych se tohle vsechno docetl.
Název: Re: Prosim o pomoc s vytvorenim skriptu pro automatizaci.
Přispěvatel: Yontalcar 03 Října 2009, 12:11:05
Myslite si, ze takhle by to mohlo fungovat?
Kód: [Vybrat]
#!/bin/bash
cd /home/sviccc/HLTV/cstrike
all=(`ls *.dem --sort=t`); for ((i=1;i<${#all[@]};i++)); do echo ${all[$i]}; bzip2 *.dem; done
...
Ale jak ted koukam tak se to nepovedlo jelikoz mi to zabalilo vse.
Nebude to fungovat, uvědom si, že to nechceš vypsat, ale jenom zkomprimovat, takže to echo nahraď čím potřebuješ

Potreboval bych nejaky chytry text, kde bych se tohle vsechno docetl.
Kód: [Vybrat]
man bash ;)
pokud chceš něco lehčího, tak http://docs.linux.cz/programming/interpreted/bashdoc-1.4/ (http://docs.linux.cz/programming/interpreted/bashdoc-1.4/)
Název: Re: Prosim o pomoc s vytvorenim skriptu pro automatizaci.
Přispěvatel: Sviccc 03 Října 2009, 12:15:51
No jasne sem to ale vul  8) To me ale mohlo napadnout ze to nechci echovat ale komprimovat :-D
Jen pockejte zajici, za par let tu budu radit ja Vam  :-*
Dekuji vsem :-)
Název: Re: Prosim o pomoc s vytvorenim skriptu pro automatizaci.
Přispěvatel: starenka 03 Října 2009, 14:14:00
Kód: [Vybrat]
#!/bin/bash
cd /home/sviccc/HLTV/cstrike
all=(`ls *.dem --sort=t`) #vezmi vsechny *.dem serazeny od nejnovejsiho po nejstarsi
for ((i=1;i<${#all[@]};i++)) #zacni je prochazet (vynech prvni - proto i=1, kdyz nepotrebujes indexy, staci napr for x in y; do echo $y)
   do
       bzip2 ${all[$i]} #kazdou polozku v sekvenci zabzipuj
   done
Název: Re: Prosim o pomoc s vytvorenim skriptu pro automatizaci.
Přispěvatel: arrange 03 Října 2009, 16:44:57
Moment, není to trochu složité? A co mezery v názvech souborů? Nebylo by jednodušší něco jako
Kód: [Vybrat]
find . -type f -name '*.dem' | while read soubor; do bzip2 "$soubor"; done?
Název: Re: Prosim o pomoc s vytvorenim skriptu pro automatizaci.
Přispěvatel: Yontalcar 03 Října 2009, 17:21:05
Moment, není to trochu složité? A co mezery v názvech souborů? Nebylo by jednodušší něco jako
Kód: [Vybrat]
find . -type f -name '*.dem' | while read soubor; do bzip2 "$soubor"; done?
Neškodilo by, kdybys si přečetl, oc má vlastně tazatel za problém
když už, tak by bylo možné
Kód: [Vybrat]
ls -1 *.dem --sort=t |tail -n +2| while read soubor; do bzip2 "$soubor"; donea nebo možná
Kód: [Vybrat]
find . -type f -name '*.dem' | while read soubor; do
    [ -z "$(lsof "${soubor}")" ]&&bzip2 "$soubor"
done
Název: Re: Prosim o pomoc s vytvorenim skriptu pro automatizaci.
Přispěvatel: starenka 03 Října 2009, 19:27:02
aha, tail me nenapadnul
Název: Re: Prosim o pomoc s vytvorenim skriptu pro automatizaci.
Přispěvatel: Martin - ViPEr*CZ* 03 Října 2009, 19:54:06
@Viper
ty soubory by asi bylo nejjednodušší testovat přes lsof
rename/delete by teoreticky mohl klidně proběhnout, a přitom by program zapisoval dál do nepojmenované inode
Asi deformace z woken. Tam pokud fopen otevře nějaká aplikace, tak ti to nedovolí smáznout.
Název: Re: Prosim o pomoc s vytvorenim skriptu pro automatizaci.
Přispěvatel: Martin - ViPEr*CZ* 03 Října 2009, 19:54:26
@Viper
ty soubory by asi bylo nejjednodušší testovat přes lsof
rename/delete by teoreticky mohl klidně proběhnout, a přitom by program zapisoval dál do nepojmenované inode
Asi deformace z woken. Tam pokud pomocí fopen otevře nějaká aplikace soubor, tak ti to nedovolí smáznout.