Autor |
Sõnum |
zeroconf
Vana Pingviin
Liitunud: 31.03.2007
Postitused: 1068
|
|
Vaja luua näiteks 1000 kataloogi üksteise kõrvale - v1, v2, v3, ...., v1000. Vajaminevate kataloogide arv võib ka muutuda. Kuidas seda teha näiteks bashi skriptiga?
Näiteks asun /home/user/ ja sinna alla peaks tulema siis /home/user/valmis/v1/, /home/user/valmis/v2/, /home/user/valmis/v3/, ...., /home/user/valmis/v1000/. Pärast saab need siis õigesse kohta tõsta. Neid iseenesest veebilehe jaoks vaja. Igasse kataloogi on vaja kopeerida üks sisuhaldusmootor ning teisest kataloogist mall sinna sisse (templates kausta). Näiteks asub sisuhaldusmootor kaustas /home/user/cms/ ja mallid /home/user/templates/. Kuna mallid on igaüks ise nimega kataloogis siis neid ilmselt automaatselt kopeerida ei saa. Kui just ei ole mingit võimalust, et võtab järjest etteantud kataloogi (/home/user/templates/) seest järjest. Ent kui saaks ka CMS-i kopeerida siis oleks seegi juba suur asi. Siis peale CMS-i kopeerimist tuleks "templates" kaust vanadest mallidest kõigepealt tühjaks teha ning igasse kataloogi mineva CMS-i templates kausta võtta mallide kaustast järgmine mall. CMS kui ka mall on kataloog, mille sees mõned alamkataloogid ja failid.
Aga jah - kui saaks kataloogidki tehtud - seegi oleks juba suur asi...
Mõned viited, mis sel teemal olen leidnud:
http://www.tldp.org/LDP/abs/html/loops1.html
http://www.gnu.org/software/bash/manual/bashref.html#SEC19
... aga ei suuda töötavat konstruktsiooni kokku panna...
Tänud juba ette...
|
|
|
|
|
|
|
|
Hardi
Pingviini aktivist
Vanus: 47
Liitunud: 31.10.2005
Postitused: 153
Distributsioon: Arch64
|
|
Kood: |
#!/bin/bash
var1=0
until [ $var1 -ge $1 ]
do
mkdir mingi$var1
((var1+=1))
done
|
|
|
|
|
|
|
|
|
zeroconf
Vana Pingviin
Liitunud: 31.03.2007
Postitused: 1068
|
|
Hardi kirjutas: | Kood: |
#!/bin/bash
var1=0
until [ $var1 -ge $1 ]
do
mkdir mingi$var1
((var1+=1))
done
| |
Tänud!
See kukub uhama ja ei ole kuskilt minu jaoks aru saada, kust määran, palju ta neid katalooge teeb. Aga muidugi sain need kataloogid tehtud kuigi tegi neid ca 150 tk. rohkem kui vaja oli - enne ei saanud lihtsalt pidama. Konqueroris vaatasin olekuribal kasvavate elementide arvu ja siis sai enam-vähem õigel ajal skriptile katkestus tehtud.
Kustutamisega on selles mõttes kehva, et Konqueror joondab numbri järgi ja nii tuleb iga 10 elemendi järel ja koha võrra väiksem element sisse.
~1000 kausta tehti valmis mõnekümne sekundiga...
|
|
|
|
|
|
|
|
Hardi
Pingviini aktivist
Vanus: 47
Liitunud: 31.10.2005
Postitused: 153
Distributsioon: Arch64
|
|
skrtipti nimi + kataloogide arv
näiteks käsk "./skript 5" peaks looma 5 kataloogi.
Ma sellele ei mõelsnudgi et ta ilma parameetrita nii võib käituda..
kommentaridega Kood: |
var1=0 #tekitab muutuja var1 ja annab selle väärtuseks 0
until [ $var1 -ge $1 ] # loop (kordus) kordab "do" ja "done" vahele jäävat osa senikaua kuni muutuja $var1 on väiksem kui muutuja $1 (muutuja $1 on sisse esimene parameeter mis sa käsureale käsujärele kirjutassid)
do
mkdir mingi$var1 # tekitab kataloogi mingi*
#siia võid panna ülejäänud käsud. (nt. failide jms kataloogi mingi$var1 kopeerimiseks)
((var1+=1)) # liidab muutujale var1 1 juurte
done |
|
|
|
|
Viimati muutis Hardi 04.08.2007, 10:04; muudetud 4 korda
|
|
|
|
zeroconf
Vana Pingviin
Liitunud: 31.03.2007
Postitused: 1068
|
|
Hardi kirjutas: | skrtipti nimi + kataloogide arv
näiteks käsk "./skript 5" peaks looma 5 kataloogi.
Ma sellele ei mõelsnudgi et ta ilma parameetrita nii võib käituda.. |
Super - täitsa töötab. Tänud veelkord!
Ent suurem töö on veel ees - igasse loodud kataloogi vaja teisest kataloogist sisu kopeerida (CMS-i mootor):
cp /home/user/cms/* /home/user/valmis/v1/
...
cp /home/user/cms/* /home/user/valmis/v1000/
Kolmandaks vaja veel teemad kopeerida:
cp /home/user/templates/iga-kord-miski-erinev-teema/ /home/user/valmis/v1/templates/
....
cp /home/user/templates/iga-kord-miski-erinev-teema/ /home/user/valmis/v1000/templates/
Aga seda peab vist käsitsi tegema kuigi võimalik, et siingi annaks midagi skripti abil teha...
|
|
|
|
|
|
|
|
nick
Pingviini kasutaja
Liitunud: 01.08.2005
Postitused: 39
Asukoht: Tartu
Distributsioon: Gentoo/FreeBSD/Xubuntu
|
|
Tsitaat: |
#!/bin/bash
var1=0
until [ $var1 -ge $1 ]
do
mkdir -p valmis/v$var1
cp cms/* valmis/v$var1
((var1+=1))
done
|
nick@ibm ~/bin $ ./test.sh 10
Mille järgi templatid valida?
Mingi reeglipärasus on olemas?
|
|
|
|
|
|
|
|
sander85
Vana Pingviin
Vanus: 39
Liitunud: 08.08.2005
Postitused: 4359
Asukoht: Tallinn (vahel ka Virtsu)
Distributsioon: Mageia, Debian, CentOS
|
|
lihtsam poleks teha mingi veebi poole pealt rakendatav php script, kust saab valida kohe saidi tegemisel ka selle, et milline template kasutusele võtta?
|
|
|
|
_________________
|
|
|
|
zeroconf
Vana Pingviin
Liitunud: 31.03.2007
Postitused: 1068
|
|
sander85 kirjutas: | lihtsam poleks teha mingi veebi poole pealt rakendatav php script, kust saab valida kohe saidi tegemisel ka selle, et milline template kasutusele võtta? |
Vaat kui oskaks siis teeks... Ei tunne paraku PHP-d ja ei jõua seda nüüd kibekiiresti ka ära õppida... Mõtlesin seda isegi, et kuidas CM Simple-ga nii teha, et tekitaks avalehe kus tabel viidetega. Viide aga oleks miski selline, mis annab sellele sisuhaldusmootorile ette argumendina, et millist malli kasutada. Võttes PHP juhendid ette selgub, et see võtab rohkem aega kui ma selle käsitsi ära teen...
Näiliselt lihtsad ülesanded inimesele, kes oskab programmeerida ent kes ei oska siis ei jaksa seda ka kohe ära õppida. Ega ma muidu siia foorumisse ei oleks kirjutanud. Inimene, kes asja jagab, kirjutab selle mõne rea skripti valmis ehk minutitega. Aitan ka ise inimesi, kellel vaja midagi teha kui minul käib see kergelt.
|
|
|
|
|
|
|
|
zeroconf
Vana Pingviin
Liitunud: 31.03.2007
Postitused: 1068
|
|
nick kirjutas: |
nick@ibm ~/bin $ ./test.sh 10
Mille järgi templatid valida?
Mingi reeglipärasus on olemas? |
Peaks järjest võtma etteantud kataloogist. Täpsemalt on neid seal 840 praegu. Niipalju oli ka vaja kaustu teha. Kaustad on ka tänu Hardi skriptile tehtud. Paraku on mallide kaustadel oma nimed. Need saab ka muidugi KRename abil näiteks hulgi ümber nimetada mingi kindla süsteemi järgi. Kasutan Kubuntu 6.06-te ja KRename on peal.. Siis saaks ka rakendada seda, et mallid ära kopeerida CMS-i templates kausta.
|
|
|
|
|
|
|
|
zeroconf
Vana Pingviin
Liitunud: 31.03.2007
Postitused: 1068
|
|
Tsitaat: | Need saab ka muidugi KRename abil näiteks hulgi ümber nimetada mingi kindla süsteemi järgi. |
Mnjah - see ei olegi nii lihtne. KRename võtab ju failid ka kataloogidest kaasa... Taas peaks olema miski kataloogide ümbernimetamise skript, ent kuidas määrata seda, et ta võtaks järjekorras ise kataloogi ja ei vaataks selle nime?
|
|
|
|
|
|
|
|
johnsmith
Vana Pingviin
Vanus: 50
Liitunud: 24.07.2006
Postitused: 714
Asukoht: Universum
Distributsioon: Ubuntu/Gentoo/FreeBSD
|
|
Kas ma saan õieti aru, et sa pead kopeerima mallid järjest kasutajate kataloogi ? Lambist pakuks välja sellist koodi.
Kood: |
#!/bin/bash
DIRECTORI="/home/user/templates"
var=1
for MINGI in `ls $DIRECTORI`;
do
cp $DIRECTORI/$MINGI /home/user/valmis/v$var/templates
let var+=1
done
|
For loop peaks käima ükshaaval kõik need failid läbi mis seal kaustas on, ma muidugi ei oska prognoosida mis järjestuses. Kui seal on 840 malli siis need kopitakse üksteise järel v1-v840/templates kausta.
Need mallid on ikka failid mitte kaustad ? Ei oska muidugi lubada, et antud kood ka töötab aga äkki on vähemalt samm õiges suunas
|
|
|
|
_________________ "Thinking is the hardest work there is, which is probably the reason why so few engage in it" - Henry Ford
|
|
|
|
zeroconf
Vana Pingviin
Liitunud: 31.03.2007
Postitused: 1068
|
|
johnsmith kirjutas: | Kas ma saan õieti aru, et sa pead kopeerima mallid järjest kasutajate kataloogi ? |
Mitte päris. See kõik toimub ühe ja sama UNIX-i kasutaja all, vaid kataloogid on erinevate nimedega. Kogu see asi läheb veebi üles. Alguses enda masinasse (kus ka Apache jne. tiksub) ja siis serverisse, mis pidevalt (24/7) sees. Kui mul tekivad kaustad v1...v840 (kus iganes need alguses ka asuvad) siis nende igaühe sees asub üks ja sama CMS ehk Content Management System ehk sisuhaldussüsteem nimega CM Simple, mis on vabalt netist saadaval, samuti need kujundused on vabalt netis saadaval. Nüüd on vaja igas kaustas (v1...v840) oleva CMS-i "templates" kausta erinev mall panna, mis ka selle asja mõte on kuna tahetakse teha iga malli näidist konkreetse CMS-i osas. "v" on lihtsalt lühend sõnast versioon.
CMS-i struktuur on selline:
Kood: |
# ls -R
2lang cmsimple content downloads images index.php templates
./2lang:
content index.php
./2lang/content:
content.htm
./cmsimple:
adm.php cms.php config.php functions.php image.php languages login.php log.txt mailform.php oedit.php search.php
./cmsimple/languages:
da.php de.php ee.php en.php es.php fi.php fr.php gr.php nl.php no.php pt.php
./content:
content.htm
./downloads:
./images:
flags index.html
./images/flags:
da.gif de.gif ee.gif en.gif es.gif fi.gif fr.gif gr.gif nl.gif no.gif
./templates:
|
"Templates" on praegu tühi kuna seda kopeeritakse 840 korda ja ei ole mõtet kopeerida sama malli 840 korda kuna iga eksemplar (v1...v840) peab sisaldama eraldi malli. Samas CMS ei tööta kui vähemalt ühte kujundust ei ole olemas ning see peab config.php failis ka öeldud olema. Muidugi võiks kõik 840 malli olla samas "templates" kaustas ent siis peaks vaatajale andma ligipääsu CMS-ile, mis ei ole turvaline. Kui saaks teha sellise PHP-koodi, mis võtab ise "templates" kaustast malli ja laadib selle samale lehele kui selle nimi näiteks rippmenüüst valitakse. Kuna ma seda teha ei oska siis olen seni läinud seda teed, et teen tabeli, mille iga kirje viitab eraldi loodud kataloogile (v1...v840) kus siis igas ühes asub sama CMS aga erineva kujundusega.
johnsmith kirjutas: | Need mallid on ikka failid mitte kaustad ? Ei oska muidugi lubada, et antud kood ka töötab aga äkki on vähemalt samm õiges suunas |
Mall kujutab endast kausta, mille sees on alamkataloogid ja failid. Aga ma testin seda skripti mingi hetke pärast. Tänud!
Üldiselt on malli kaustas sellised failid ja kataloogid:
Kood: |
# ls -R
images menu stylesheet.css template.htm
./images:
spacer.gif template_r5_c9.jpg template_r8_c1.jpg
template_r10_c1.jpg template_r6_c1.jpg template_r8_c5.jpg
template_r1_c1.jpg template_r6_c2.jpg template_r8_c6.jpg
template_r2_c1.jpg template_r6_c9.jpg template_r8_c7.jpg
template_r2_c7.jpg template_r7_c1.jpg template_r9_c5_f2.jpg
template_r3_c1.jpg template_r7_c2.jpg template_r9_c5.jpg
template_r4_c1.jpg template_r7_c3.jpg template_r9_c7_f2.jpg
template_r5_c1.jpg template_r7_c4.jpg template_r9_c7.jpg
template_r5_c2.jpg template_r7_c9.jpg template_r9_c8.jpg
./menu:
doc.gif docs.gif sdoc.gif sdocs.gif |
See on natuke erinev mallide lõikes aga kataloogid "images" ja "menu" ning failid "stylesheet.css" ja " template.htm" in igal juhul olemas kuna CMS nõuab seda.
|
|
|
|
Viimati muutis zeroconf 04.08.2007, 23:42; muudetud 5 korda
|
|
|
|
johnsmith
Vana Pingviin
Vanus: 50
Liitunud: 24.07.2006
Postitused: 714
Asukoht: Universum
Distributsioon: Ubuntu/Gentoo/FreeBSD
|
|
Ma nüüd unise peaga eriti pihta ei saanud......
aga kausta kopimiseks peaks -r võtme ette panema
Kood: | cp -r $DIRECTORI/$MINGI /home/user/valmis/v$var/templates
|
|
|
|
|
_________________ "Thinking is the hardest work there is, which is probably the reason why so few engage in it" - Henry Ford
|
|
|
|
zeroconf
Vana Pingviin
Liitunud: 31.03.2007
Postitused: 1068
|
|
johnsmith kirjutas: | Ma nüüd unise peaga eriti pihta ei saanud......
aga kausta kopimiseks peaks -r võtme ette panema
Kood: | cp -r $DIRECTORI/$MINGI /home/user/valmis/v$var/templates
| |
Jah - seda tean. Üldiselt lihtsamad bashi käsud on selged ning man-i oskab ka lugeda kuigi keerulisematest asjadest (a la regulaaravaldised) ei saa alati aru. Aga tänud kaasa mõtlemast!
|
|
|
|
|
|
|
|
zeroconf
Vana Pingviin
Liitunud: 31.03.2007
Postitused: 1068
|
|
Leidsin sellise lahenduse rippmenüüde tegemiseks - http://www.dynamicdrive.com/dynamicindex1/combodescribe.htm
Eks tuleb netis pisut ringi tuustida ja siis võib juhtuda, et läheb isegi õnneks. Eeltoodud aadressil teisigi kasulikke vidinaid.
Alltoodud kood tuleb HTML-failis (*.html) panna <BODY> </BODY> märgendite vahele.
Toon koodi ka siin ära:
Kood: |
<!--Example drop down menu 1-->
<form name="form1">
<select name="select1" size="1" style="background-color:#FFFFD7" onChange="displaydesc(document.form1.select1, thetext1, 'textcontainer1')">
<option selected value="http://www.javascriptkit.com">JavaScript Kit </option>
<option value="http://freewarejava.com">Freewarejava.com</option>
<option value="http://wired.com" target="newwin">Wired News</option>
<option value="http://www.news.com">News.com</option>
<option value="http://www.codingforums.com" target="newwin">Coding Forums</option>
</select>
<input type="button" value="Go"
onClick="jumptolink(document.form1.select1)"><br>
<span id="textcontainer1" align="left" style="font:italic 13px Arial">
</span>
</form>
<!--Example drop down menu 2-->
<form name="form2">
<select name="select2" size="1" style="background-color:#E3FFDF" onChange="displaydesc(document.form2.select2, thetext2, 'textcontainer2')">
<option selected value="http://www.cnn.com">CNN</option>
<option value="http://www.msnbc.com">MSNBC</option>
<option value="http://news.bbc.co.uk">BBC News</option>
<option value="http://www.theregister.com/">The Register</option>
</select>
<input type="button" value="Go"
onClick="jumptolink(document.form2.select2)"><br>
<span id="textcontainer2" align="left" style="font:italic 13px Arial">
</span>
</form>
<!--IMPORTANT: Below script should always follow all of your HTML codes above, and never proceed them-->
<!--To be safe, just add below script at the end of your page-->
<script type="text/javascript">
/***********************************************
* Drop down menu w/ description- © Dynamic Drive (www.dynamicdrive.com)
* This notice must stay intact for use
* Visit http://www.dynamicdrive.com/ for full source code
***********************************************/
//1) CUSTOMIZE TEXT DESCRIPTIONS FOR LINKS ABOVE
var thetext1=new Array()
thetext1[0]="Comprehensive JavaScript tutorials and over 400+ free scripts"
thetext1[1]="Direct link to hundreds of free Java applets online!"
thetext1[2]="Up to date news on the technology front"
thetext1[3]="News.com- The #1 technology News site."
thetext1[4]="Web Coding and development forums"
/// You may define additional text arrays if you have multiple drop downs:
var thetext2=new Array()
thetext2[0]="CNN- US and World News."
thetext2[1]="MSNBC- NBC News online."
thetext2[2]="BBC News- Updated every minute of every day."
thetext2[3]="TheRegister- Daily IT news."
// Now, see 2) below for final customization step
function displaydesc(which, descriptionarray, container){
if (document.getElementById)
document.getElementById(container).innerHTML=descriptionarray[which.selectedIndex]
}
function jumptolink(what){
var selectedopt=what.options[what.selectedIndex]
if (document.getElementById && selectedopt.getAttribute("target")=="newwin")
window.open(selectedopt.value)
else
window.location=selectedopt.value
}
//2) Call function displaydesc() for each drop down menu you have on the page
// This function displays the initial description for the selected menu item
// displaydesc(name of select menu, name of corresponding text array, ID of SPAN container tag):
// Important: Remove the calls not in use (ie: 2nd line below if there's only 1 menu on your page)
displaydesc(document.form1.select1, thetext1, 'textcontainer1')
displaydesc(document.form2.select2, thetext2, 'textcontainer2')
</script>
|
|
|
|
|
|
|
|
|
zeroconf
Vana Pingviin
Liitunud: 31.03.2007
Postitused: 1068
|
|
Kood: |
#!/bin/bash
DIRECTORI="/home/user/templates"
var=1
for MINGI in `ls $DIRECTORI`;
do
cp -R $DIRECTORI/$MINGI /home/user/valmis/v$var/templates
let var+=1
done
|
Veateated olid: Kood: |
cp: kataloogi ``/home/user/valmis/v841/templates'' ei õnnestu luua: No such file or directory
cp: kataloogi ``/home/user/valmis/v842/templates'' ei õnnestu luua: No such file or directory |
.... ehk siis ei arvestanud selle parameetriga, mida skriptile andsin (./skript 840). Muidu võttis kenasti teemad kaasa ja pani järjekorras iga teema oma kausta. Kusjuures vahet ei olnud kas andsin parameetriks numbri skriptile või ei - skript hakkas uhama lõputult. Aga siin siis - CTRL+C abiks...
Et kuhu see until [ $var -ge $1 ] kirjutada? Et ta lõpetaks töö siis kui vaja? Selgub, et for i in list puhul peaks midagi muud olema (vt. siia) aga ei ole veel pihta saanud, mismoodi...
Ehk siis sai asja põhimõtteliselt tehtud kuigi skripti töö tuli ise katkestada kui 840 täis sai.
|
|
|
|
|
|
|
|
johnsmith
Vana Pingviin
Vanus: 50
Liitunud: 24.07.2006
Postitused: 714
Asukoht: Universum
Distributsioon: Ubuntu/Gentoo/FreeBSD
|
|
See skript jah ei kasuta parameetrit tähendab sa vöid selle talle anda aga seda ei kasutata kuskil.
Miks ta jätkab seda peale 840 ei oska öelda praegu pole aega testida ka aga äkki on sul seal mallide kaustas rohkem faile kui 840 ?
Igaljuhul see on alles beeta versioon
Nyyd peaks skript igal juhul loobist väljuma kui 840 kausta täis aga siis ilmselt jääb viimane kaust kopimata. Sellel on kindlasti lihtne lahendus aga hetkel peab tööd tegema ega ole vöimalik testida.
Kood: |
#!/bin/bash
DIRECTORI="/home/user/templates"
var=1
for MINGI in `ls $DIRECTORI`;
do
cp -R $DIRECTORI/$MINGI /home/user/valmis/v$var/templates
let var+=1
if [ "$var" -eq 840 ]
then
break
fi
done
|
EDIT:
Aga kui panna test ette
Kood: |
#!/bin/bash
DIRECTORI="/home/user/templates"
var=1
for MINGI in `ls $DIRECTORI`;
do
if [ "$var" -eq 841 ]
then
break
fi
cp -R $DIRECTORI/$MINGI /home/user/valmis/v$var/templates
let var+=1
done
|
|
|
|
|
_________________ "Thinking is the hardest work there is, which is probably the reason why so few engage in it" - Henry Ford
|
|
|
|
zeroconf
Vana Pingviin
Liitunud: 31.03.2007
Postitused: 1068
|
|
Suured tänud - asi toimib. Ehk siis mugandasin seda skripti natuke oma tarbeks ja tuli selline asi:
Kood: |
#!/bin/bash
mallide_asukoht="/home/user/tarkvara/cms/cmsimple/templates/cmsimple_mallid_k6ik_koos_840_malli"
cms_asukoht="/home/user/tarkvara/cms/cmsimple/cm_simple_mallid/valmis"
var=1
for MINGI in `ls $mallide_asukoht`;
do
if [ "$var" -eq 841 ]
then
break
fi
cp -R $mallide_asukoht/$MINGI $cms_asukoht/v$var/templates
let var+=1
done
|
... ja see skript töötab kui panna 1 võrra rohkem kui vaja see "-eq" argument.
|
|
|
|
|
|
|
|
zeroconf
Vana Pingviin
Liitunud: 31.03.2007
Postitused: 1068
|
|
Kuna teemad vaja ka kokku pakkida siis analoogselt Hardi pakutud kataloogide loomise skriptile sai ka pakkimise skript kribatud:
Kood: |
#!/bin/bash
var1=1
until [ $var1 -ge $1 ]
do
zip -9 -r v$var1 v$var1
((var1+=1))
done
|
Salvestab selle näiteks tekstifailina pakkimine ja annab käivitusõiguse.
Seejärel siis ./pakkimine 840 ja pakitaksegi kõik 840 teemat omaette v1.zip, v2.zip,...,v840.zip
Sai veel eespool toodud koodi abil rippmenüü tehtud ning tabelarvutusprogrammi Calc abil tekitatud 840 rida teksti. Sõnad ja numbrid eraldi lahtritesse, siis paljundasin seeriad kuni 840-ni ning pärast CONCATENATE funktsiooni abil liitsin tekstid taas ühte kokku ja kopeerisin need sinna rippmenüü massiivi. Samamoodi sai ka javaskripti massiivi viitetekstid tehtud. Kõik see sai CM Simple-sse pandud ja kena veebileht koos 840 CM Simple teema vaatamise ja allalaadimisega olemas.
|
|
|
|
|
|
|
|
|