kuidas luua palju katalooge korraga terminalis?
Moderaator: Moderaatorid
kuidas luua palju katalooge korraga terminalis?
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 ... html#SEC19
... aga ei suuda töötavat konstruktsiooni kokku panna...
Tänud juba ette...
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 ... html#SEC19
... aga ei suuda töötavat konstruktsiooni kokku panna...
Tänud juba ette...
Tänud!Hardi kirjutas:Kood: Vali kõik
#!/bin/bash var1=0 until [ $var1 -ge $1 ] do mkdir mingi$var1 ((var1+=1)) done
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...
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
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: Vali kõik
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, 11:04, muudetud 4 korda kokku.
Super - täitsa töötab. Tänud veelkord!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..
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...
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...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?
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.
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.nick kirjutas: nick@ibm ~/bin $ ./test.sh 10
Mille järgi templatid valida?
Mingi reeglipärasus on olemas?
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?Need saab ka muidugi KRename abil näiteks hulgi ümber nimetada mingi kindla süsteemi järgi.
Kas ma saan õieti aru, et sa pead kopeerima mallid järjest kasutajate kataloogi ? Lambist pakuks välja sellist koodi.
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
Kood: Vali kõik
#!/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
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
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.johnsmith kirjutas:Kas ma saan õieti aru, et sa pead kopeerima mallid järjest kasutajate kataloogi ?
CMS-i struktuur on selline:
Kood: Vali kõik
# 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:
Mall kujutab endast kausta, mille sees on alamkataloogid ja failid. Aga ma testin seda skripti mingi hetke pärast. Tänud!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
Üldiselt on malli kaustas sellised failid ja kataloogid:
Kood: Vali kõik
# 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
Viimati muutis zeroconf, 05.08.2007, 00:42, muudetud 5 korda kokku.
Ma nüüd unise peaga eriti pihta ei saanud......
aga kausta kopimiseks peaks -r võtme ette panema
aga kausta kopimiseks peaks -r võtme ette panema
Kood: Vali kõik
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
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!johnsmith kirjutas:Ma nüüd unise peaga eriti pihta ei saanud......
aga kausta kopimiseks peaks -r võtme ette panemaKood: Vali kõik
cp -r $DIRECTORI/$MINGI /home/user/valmis/v$var/templates
Leidsin sellise lahenduse rippmenüüde tegemiseks - http://www.dynamicdrive.com/dynamicinde ... scribe.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:
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: Vali kõik
<!--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>
Kood: Vali kõik
#!/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
Kood: Vali kõik
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 directoryEt 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.
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.
EDIT:
Aga kui panna test ette
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: Vali kõik
#!/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
Aga kui panna test ette
Kood: Vali kõik
#!/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
Suured tänud - asi toimib. Ehk siis mugandasin seda skripti natuke oma tarbeks ja tuli selline asi:
... ja see skript töötab kui panna 1 võrra rohkem kui vaja see "-eq" argument.
Kood: Vali kõik
#!/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
Kuna teemad vaja ka kokku pakkida siis analoogselt Hardi pakutud kataloogide loomise skriptile sai ka pakkimise skript kribatud:
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.
Kood: Vali kõik
#!/bin/bash
var1=1
until [ $var1 -ge $1 ]
do
zip -9 -r v$var1 v$var1
((var1+=1))
done
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.





