<?xml
version="1.0" encoding="utf-8"?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:atom="http://www.w3.org/2005/Atom"
>

<channel xml:lang="fr">
	<title>Tech de Gamuza</title>
	<link>https://tech.gamuza.fr/</link>
	
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="https://tech.gamuza.fr/spip.php?id_mot=4&amp;page=backend" rel="self" type="application/rss+xml" />




<item xml:lang="fr">
		<title>Script pour mettre &#224; jour par SVN et GIT tous les plugins d'un SPIP</title>
		<link>https://tech.gamuza.fr/script-pour-mettre-a-jour-par-svn-et-git-tous-les-plugins-d-un-spip.html</link>
		<guid isPermaLink="true">https://tech.gamuza.fr/script-pour-mettre-a-jour-par-svn-et-git-tous-les-plugins-d-un-spip.html</guid>
		<dc:date>2016-05-20T16:52:59Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Christophe</dc:creator>


		<dc:subject>bash</dc:subject>
		<dc:subject>svn</dc:subject>
		<dc:subject>Linux</dc:subject>
		<dc:subject>plugin SPIP</dc:subject>
		<dc:subject>scripts</dc:subject>
		<dc:subject>GIT</dc:subject>

		<description>&lt;p&gt;Script de maj plugins SPIP en SVN et GIT&lt;/p&gt;

-
&lt;a href="https://tech.gamuza.fr/-scripts-et-commandes-sh-.html" rel="directory"&gt;Scripts sh&lt;/a&gt;

/ 
&lt;a href="https://tech.gamuza.fr/+-bash-+.html" rel="tag"&gt;bash&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-svn-+.html" rel="tag"&gt;svn&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-linux-+.html" rel="tag"&gt;Linux&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-plugin-spip-+.html" rel="tag"&gt;plugin SPIP&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-scripts-+.html" rel="tag"&gt;scripts&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-git-+.html" rel="tag"&gt;GIT&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Un petit script qui permet de &lt;strong&gt;mettre &#224; jour&lt;/strong&gt; en ligne de commande tous les plugins d'un site SPIP qui sont versionn&#233;s soit sous &lt;strong&gt;SVN&lt;/strong&gt; soit sous &lt;strong&gt;GIT&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;maj_plugins.sh&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='bash spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#!/bin/bash # script de maj des plugins d'un spip dossier=($(ls -d *)) for i in &#034;${dossier[@]}&#034; do if [ -d &#034;$i/.svn&#034; ];then svn up ./$i ;fi if [ -d &#034;$i/.git&#034; ];then echo &#034;Mise &#224; jour de $i :&#034;; cd $i; git pull; cd .. ; fi done&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Utilisation&lt;/strong&gt; :
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Cr&#233;er un fichier &lt;strong&gt;maj_plugin.sh&lt;/strong&gt; contenant le code ci-dessus.
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Placer ce fichier dans un r&#233;pertoire de votre PATH.&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;echo $PATH&lt;/textarea&gt;
&lt;p&gt;&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Placez vous dans le r&#233;pertoire &lt;strong&gt;plugins/&lt;/strong&gt; de votre site, et lancez le script&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;maj_plugins.sh&lt;/textarea&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Modifier les droits sur une arborescence de dossiers et fichiers</title>
		<link>https://tech.gamuza.fr/modifier-les-droits-sur-une-arborescence-de-dossiers-et-fichiers.html</link>
		<guid isPermaLink="true">https://tech.gamuza.fr/modifier-les-droits-sur-une-arborescence-de-dossiers-et-fichiers.html</guid>
		<dc:date>2016-05-07T10:44:29Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>clem</dc:creator>


		<dc:subject>bash</dc:subject>
		<dc:subject>Linux</dc:subject>
		<dc:subject>commande sh</dc:subject>

		<description>&lt;p&gt;&lt;strong&gt;But des commandes :&lt;/strong&gt; modifier les droits sur une arborescence en diff&#233;renciant les droits sur les dossiers et les fichiers.&lt;/p&gt;

-
&lt;a href="https://tech.gamuza.fr/-scripts-et-commandes-sh-.html" rel="directory"&gt;Scripts sh&lt;/a&gt;

/ 
&lt;a href="https://tech.gamuza.fr/+-bash-+.html" rel="tag"&gt;bash&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-linux-+.html" rel="tag"&gt;Linux&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-commande-sh-+.html" rel="tag"&gt;commande sh&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Lorsque l'on doit modifier les permissions&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;voir Wikipedia Permissions_UNIX pour les explications sur les permissions&#034; id=&#034;nh1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt; sur une arborescence de dossiers et fichiers, la m&#233;thode &#034;simple&#034; consiste &#224; utiliser la commande (par exemple ici pour donner des permissions de type 2775)&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;chmod -R 2775 /chemin/arborescence/a/modifier&lt;/textarea&gt;
&lt;p&gt;c'est &#224; dire utiliser l'option &lt;strong&gt;-R&lt;/strong&gt; de la commande &lt;strong&gt;chmod&lt;/strong&gt; qui permet de propager la modification des droits sur l'ensemble des dossiers et fichiers de l'arborescence.&lt;br class='autobr' /&gt; Cette m&#233;thode &#224; l'inconv&#233;nient que fichiers et dossiers h&#233;ritent des m&#234;me permissions alors que si on souhaite (en g&#233;n&#233;ral) pouvoir autoriser l'acc&#232;s aux dossiers, il n'est pas souhaitable de mettre tous les fichiers de l'arborescence en mode &#034;ex&#233;cutable&#034; : exprim&#233; en octal, cela revient &#224; vouloir donner la permission &lt;strong&gt;7&lt;/strong&gt; (x) pour les dossiers alors que l'on veut donner la permission &lt;strong&gt;6&lt;/strong&gt; (-) pour les fichiers.&lt;/p&gt;
&lt;p&gt;Pour pouvoir mettre des droits diff&#233;rents sur les dossiers et les fichiers d'une arborescence on peut donc utiliser les commandes suivantes (exemple pour mettre 2775 sur les dossiers et 664 sur les fichiers) :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='3' class='spip_cadre spip_cadre_block' dir='ltr'&gt;chemin='/chemin/arborescence/a/modifier' find ${chemin} -type f -print0 | xargs -0 chmod 0664 find ${chemin} -type d -print0 | xargs -0 chmod 2775&lt;/textarea&gt;
&lt;p&gt;c'est &#224; dire utiliser la commande &lt;strong&gt;find&lt;/strong&gt; avec l'option &lt;strong&gt;-type d&lt;/strong&gt; pour les dossiers ou &lt;strong&gt;-type f&lt;/strong&gt; pour les fichiers afin de s&#233;lectionner uniquement dossiers ou fichiers et de rediriger le r&#233;sultat de cette commande vers la commande &lt;strong&gt;chmod&lt;/strong&gt; avec les permissions appropri&#233;es au type s&#233;lectionn&#233;.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh1&#034; class=&#034;spip_note&#034; title=&#034;Notes 1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;voir Wikipedia &lt;a href=&#034;https://fr.wikipedia.org/wiki/Permissions_UNIX&#034; class=&#034;spip_glossaire&#034; rel=&#034;external&#034;&gt;Permissions_UNIX&lt;/a&gt; pour les explications sur les permissions&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>R&#233;capitulatif sur les tests en bash...</title>
		<link>https://tech.gamuza.fr/recapitulatif-sur-les-tests-en-bash.html</link>
		<guid isPermaLink="true">https://tech.gamuza.fr/recapitulatif-sur-les-tests-en-bash.html</guid>
		<dc:date>2015-11-02T21:14:19Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Christophe, clem</dc:creator>


		<dc:subject>bash</dc:subject>
		<dc:subject>Linux</dc:subject>
		<dc:subject>r&#233;f&#233;rences</dc:subject>

		<description>&lt;p&gt;&lt;strong&gt;R&#233;f&#233;rence&lt;/strong&gt; : petit r&#233;sum&#233; de la syntaxe des test en bash&lt;/p&gt;

-
&lt;a href="https://tech.gamuza.fr/-scripts-et-commandes-sh-.html" rel="directory"&gt;Scripts sh&lt;/a&gt;

/ 
&lt;a href="https://tech.gamuza.fr/+-bash-+.html" rel="tag"&gt;bash&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-linux-+.html" rel="tag"&gt;Linux&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-references-+.html" rel="tag"&gt;r&#233;f&#233;rences&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Ecrire des scripts bash est un sport de combat pour le codeur peu aguerri dans ce langage complexe et susceptible...&lt;br class='autobr' /&gt;
Un petit r&#233;sum&#233; des diff&#233;rentes possibilit&#233;s de test sur des valeurs arithm&#233;tiques ou des cha&#238;nes de caract&#232;res (par ex dans une instruction &#034;if&#034;) et des erreurs &#224; &#233;viter !&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Une seule condition &#224; tester :&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;cas 1)&lt;/strong&gt; tests avec op&#233;rateur &lt;strong&gt;unaire&lt;/strong&gt; : &lt;strong&gt;=&lt;/strong&gt; ou &lt;strong&gt;-eq&lt;/strong&gt;, &lt;strong&gt; !=&lt;/strong&gt; ou &lt;strong&gt;-ne&lt;/strong&gt;, &lt;strong&gt;&gt;&lt;/strong&gt; ou &lt;strong&gt;-gt&lt;/strong&gt;, &lt;strong&gt;&lt;&lt;/strong&gt; ou &lt;strong&gt;-lt&lt;/strong&gt; )&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; if [ $var = 1 ] # OK if [ $var -gt 0 ] # OK if [$var &gt; 0] # Erreur il faut un espace apr&#232;s [ et avant ] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Tests avec &lt;strong&gt;variables d&#233;finies avant&lt;/strong&gt; ou non :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; var=1 # d&#233;finition de $var, $nonvar n'est pas d&#233;finie if [ $var = truc ] # OK ($var d&#233;finie auparavant) if [ $nonvar = machin ] # erreur: $nonvar &#233;tant ind&#233;finie, le test revient &#224;: if [ = 1 ] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;2 options pour &#233;viter l'erreur lorsque l'on ne sait pas si la variable a &#233;t&#233; d&#233;finie :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; if [ &#034;$nonvar&#034; = 1 ] # OK: protection de la variable par &#034; &#034; if [[ $nonvar = 1 ]] # OK &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;La construction&lt;strong&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[[ ]]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/strong&gt; est la commande &#233;tendue de [ ] dans Bash.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;cas 2)&lt;/strong&gt; tests avec double op&#233;rateurs : &lt;strong&gt;==&lt;/strong&gt;, &lt;strong&gt; !==&lt;/strong&gt;, &lt;strong&gt; &gt;=&lt;/strong&gt;, &lt;strong&gt;&lt;=&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='bash sans_telechargement spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; if (( $var == 1 )) # OK if (( $var &lt;= 1 )) # OK if (( $var = 1 )) # erreur: = est utilis&#233; comme op&#233;rateur d'affectation avec (( )) if (( $var -gt 1 )) # erreur: op&#233;rateurs -gt, -lt... non disponibles avec (( )) if [ $var &gt;= 0 ] # erreur: double parenth&#232;se obligatoire avec ces op&#233;rateurs&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;La construction &lt;strong&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;(( ))&lt;/code&gt;&lt;/strong&gt; &#233;value une expression arithm&#233;tique.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;cas 3)&lt;/strong&gt; tests sp&#233;cifiques des &lt;strong&gt;cha&#238;nes de caract&#232;res&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='bash sans_telechargement spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; if [ -n &#034;$var&#034; ] # la cha&#238;ne $var n'est pas de longueur nulle if [ -z &#034;$var&#034; ] # la cha&#238;ne $var est de longueur nulle (est donc '')&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&lt;h2 class=&#034;spip&#034;&gt;Test deux conditions&lt;/h2&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='bash sans_telechargement spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; if [ $var = 0 -o $var = 1 ] # OK (-o : condition OU) if [ $var &gt; &#034;0&#034; -a $var = &#034;1&#034; ] # OK (-a : condition AND)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Variables d&#233;finies ou non :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='bash sans_telechargement spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; var=oui # $var est d&#233;finie, $nonvar ne l'est pas if [ $var = non -o $var = n ] # OK if [ $nonvar = non -a $var = n ] # erreur: $nonvar pas d&#233;finie if [ &#034;$nonvar&#034; = &#034;non&#034; -o &#034;$var&#034; = &#034;n&#034; ] # OK if [[ $nonvar= &#034;non&#034; -o $var= &#034;n&#034; ]] # erreur&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Dans le cas d'un test double, la protection des variable par &#034; &#034; est la seule option pour &#233;viter les erreurs de variables non d&#233;finies.&lt;/p&gt;
&lt;hr&gt;&lt;h2 class=&#034;spip&#034;&gt;Tests sur les objets du syst&#232;me de fichiers&lt;/h2&gt;
&lt;p&gt;Les op&#233;rateurs de tests disponibles sont, pour les les objets du syst&#232;me de fichiers :&lt;br class='autobr' /&gt;
&lt;strong&gt;exemples de code :&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='bash sans_telechargement spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; if [ -e $FILE ]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&#034;si $FILE est un fichier&#034;&lt;br class='autobr' /&gt;
&lt;br style=&#034;clear: both;&#034;/&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='bash sans_telechargement spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; if [ ! -d mon_rep ]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&#034;si le r&#233;pertoire mon_rep n'existe pas&#034;&lt;br class='autobr' /&gt;
&lt;br style=&#034;clear: both;&#034;/&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Liste des tests :&lt;/strong&gt;&lt;/p&gt;
&lt;table class=&#034;table spip&#034;&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th id='id9e76_c0'&gt; Test &lt;/th&gt;&lt;th id='id9e76_c1'&gt; Descriptif &lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id9e76_c0'&gt;-e&lt;/td&gt;
&lt;td headers='id9e76_c1'&gt;vrai si $FILE &lt;strong&gt;existe&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id9e76_c0'&gt;-s&lt;/td&gt;
&lt;td headers='id9e76_c1'&gt;vrai si $FILE &lt;strong&gt;existe et si sa taille est sup&#233;rieure &#224; z&#233;ro&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id9e76_c0'&gt;-f&lt;/td&gt;
&lt;td headers='id9e76_c1'&gt;vrai si $FILE est &lt;strong&gt;un fichier&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id9e76_c0'&gt;-r&lt;/td&gt;
&lt;td headers='id9e76_c1'&gt;vrai si $FILE est &lt;strong&gt;un fichier avec la permission (read)&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id9e76_c0'&gt;-w&lt;/td&gt;
&lt;td headers='id9e76_c1'&gt;vrai si $FILE est &lt;strong&gt;un fichier avec la permission (write)&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id9e76_c0'&gt;-x&lt;/td&gt;
&lt;td headers='id9e76_c1'&gt;vrai si $FILE est &lt;strong&gt;un fichier avec la permission (execute)&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id9e76_c0'&gt;-d&lt;/td&gt;
&lt;td headers='id9e76_c1'&gt;vrai si $FILE est &lt;strong&gt;un r&#233;pertoire&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id9e76_c0'&gt;-L&lt;/td&gt;
&lt;td headers='id9e76_c1'&gt;vrai si $FILE est &lt;strong&gt;un lien symbolique&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id9e76_c0'&gt;-O&lt;/td&gt;
&lt;td headers='id9e76_c1'&gt;vrai si on est le &lt;strong&gt;owner&lt;/strong&gt; de $FILE&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id9e76_c0'&gt;-G&lt;/td&gt;
&lt;td headers='id9e76_c1'&gt;vrai si on a le m&#234;me &lt;strong&gt;groupe&lt;/strong&gt; que $FILE&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id9e76_c0'&gt;-N&lt;/td&gt;
&lt;td headers='id9e76_c1'&gt;vrai si le fichier a &#233;t&#233; modifi&#233; depuis sa derni&#232;re ouverture&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id9e76_c0'&gt;f1 -nt f2&lt;/td&gt;
&lt;td headers='id9e76_c1'&gt;le fichier f1 est plus r&#233;cent que f2&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id9e76_c0'&gt;f1 -ot f2&lt;/td&gt;
&lt;td headers='id9e76_c1'&gt;le fichier f1 est plus vieux que f2&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;hr&gt;&lt;h2 class=&#034;spip&#034;&gt;Tests d'appartenance &#224; une liste (=array une dimension)&lt;/h2&gt;
&lt;p&gt;Bien que &#231;a ne soit que peu utilis&#233; en bash, il est possible de cr&#233;er des tableaux &#224; une dimension (= liste) et de tester si une variable appartient &#224; une liste.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='bash sans_telechargement spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;# creation de la liste (&#233;l&#233;ments s&#233;par&#233;s par un espace) ma_liste=(toto titi tata) ma_variable=tata # test d'appartenance de $variable &#224; la liste (ou pas!) if [[ &#034; ${ma_liste[@]} &#034; =~ &#034; ${ma_variable} &#034; ]]; then # instructions &#224; &#233;xecuter si $ma_variable appartient &#224; la liste fi if [[ ! &#034; ${ma_liste[@]} &#034; =~ &#034; ${ma_variable} &#034; ]]; then # instructions &#224; &#233;xecuter si $ma_variable n'appartient pas &#224; la liste fi&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;hr&gt;&lt;h2 class=&#034;spip&#034;&gt;R&#233;f&#233;rences :&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; man test : &lt;a href=&#034;http://ss64.com/bash/test.html&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://ss64.com/bash/test.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt; la r&#233;f&#233;rence de base : &lt;a href=&#034;https://fr.wikibooks.org/wiki/Programmation_Bash/Tests&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://fr.wikibooks.org/wiki/Programmation_Bash/Tests&lt;/a&gt;&lt;/li&gt;&lt;li&gt; pour aller plus loin : &lt;a href=&#034;http://abs.traduc.org/abs-5.0-fr/ch07.html&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://abs.traduc.org/abs-5.0-fr/ch07.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt; r&#233;sum&#233; des diff&#233;rents op&#233;rateurs de tests (arithm&#233;tiques, cha&#238;nes de caract&#232;res, syst&#232;me de fichiers et dossiers) : &lt;a href=&#034;http://techietent.blogspot.fr/2013/03/bash-test-operators.html&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://techietent.blogspot.fr/2013/03/bash-test-operators.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt; la bidouille pour tester l'appartenance &#224; une liste sans it&#233;rer dessus : &lt;a href=&#034;https://stackoverflow.com/a/15394738&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://stackoverflow.com/a/15394738&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<pre>Erreur d’exécution plugins/spipr-dist/inclure/rss-item.html</pre>
<item xml:lang="fr">
		<title>Myextract : un script pour restaurer un ensemble de dumps MySQL</title>
		<link>https://tech.gamuza.fr/un-script-pour-restaurer-un-ensemble-de-dumps-mysql.html</link>
		<guid isPermaLink="true">https://tech.gamuza.fr/un-script-pour-restaurer-un-ensemble-de-dumps-mysql.html</guid>
		<dc:date>2015-10-12T14:25:59Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>clem</dc:creator>


		<dc:subject>bash</dc:subject>
		<dc:subject>MySQL</dc:subject>
		<dc:subject>script sh</dc:subject>

		<description>&lt;p&gt;&lt;strong&gt;But du script&lt;/strong&gt; : restaurer un ensemble de dumps MySQL bzipp&#233;s et stock&#233;s dans un r&#233;pertoire en une seule op&#233;ration (utilitaire pour migration de serveur).&lt;/p&gt;

-
&lt;a href="https://tech.gamuza.fr/-scripts-et-commandes-sh-.html" rel="directory"&gt;Scripts sh&lt;/a&gt;

/ 
&lt;a href="https://tech.gamuza.fr/+-bash-+.html" rel="tag"&gt;bash&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-mysql-+.html" rel="tag"&gt;MySQL&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-script-sh-+.html" rel="tag"&gt;script sh&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;div class='spip_document_59 spip_document spip_documents spip_document_image spip_documents_right spip_document_right'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://tech.gamuza.fr/local/cache-vignettes/L469xH154/liste_dumps2-3a1a0.jpg?1768436110' width='469' height='154' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Le but de ce script est de restaurer un ensemble de sauvegardes MySQL qui sont stock&#233;es au format bzip2 dans un dossier. Chaque fichier d'extension .sql.bz2 porte le nom de la base de donn&#233;es dans laquelle il doit &#234;tre restaur&#233; : par exemple &lt;strong&gt;toto.sql.bz2&lt;/strong&gt; devra &#234;tre restaur&#233; dans la base &lt;strong&gt;toto&lt;/strong&gt;.&lt;br class='autobr' /&gt;
Le chemin du dossier contenant les sauvegardes est pass&#233; en param&#232;tre au script.&lt;br class='autobr' /&gt;
&lt;br style=&#034;clear: both;&#034;/&gt;&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='28' class='spip_cadre spip_cadre_block' dir='ltr'&gt;#!/bin/bash # myextract.sh # decompacte un ensemble de dumps MySQL bzipp&#233;s stock&#233;es dans un r&#233;pertoire # le chemin du r&#233;pertoire est pass&#233; en param&#232;tre du script # exemple: myextract.sh /chemin/du/repertoire/des_bzips # configuration # nom et mot de passe de l'utilisateur MySQL USER_MYSQL=toto PASS_MYSQL=&#034;super_secret&#034; for j in &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ls -1 -r $1&lt;/code&gt;; do LA_BASE=&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;echo $j |sed s/.sql.bz2//&lt;/code&gt; echo &#034;restauration de $LA_BASE&#034; # si les fichiers de dump ont &#233;t&#233;s g&#233;n&#233;r&#233;s avec l'option -B (cr&#233;ation de la base), # enlever l'option -D $LA_BASE dans la commande suivante bunzip2 -c $1/$j | mysql -u$USER_MYSQL --password=$PASS_MYSQL -D $LA_BASE done&lt;/textarea&gt;
&lt;p&gt;A lancer dans un tmux/screen si le nombre de sauvegardes (ou leur taille) est cons&#233;quent(e).&lt;/p&gt;
&lt;p&gt;Pour la g&#233;n&#233;ration des sauvegardes MySQL sous forme de fichiers bzipp&#233;s voir : &lt;a href='https://tech.gamuza.fr/mydump-un-petit-script-pour-sauvegarder-des-bases-de-donnees-au-format-bzip2.html' class=&#034;spip_in&#034;&gt;Mydump : un petit script pour sauvegarder des bases de donn&#233;es au format bzip2&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Mydump : un petit script pour sauvegarder des bases de donn&#233;es au format bzip2</title>
		<link>https://tech.gamuza.fr/mydump-un-petit-script-pour-sauvegarder-des-bases-de-donnees-au-format-bzip2.html</link>
		<guid isPermaLink="true">https://tech.gamuza.fr/mydump-un-petit-script-pour-sauvegarder-des-bases-de-donnees-au-format-bzip2.html</guid>
		<dc:date>2015-10-12T13:08:30Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>clem</dc:creator>


		<dc:subject>bash</dc:subject>
		<dc:subject>Linux</dc:subject>
		<dc:subject>MySQL</dc:subject>
		<dc:subject>script sh</dc:subject>

		<description>&lt;p&gt;&lt;strong&gt;But du script&lt;/strong&gt; : r&#233;aliser la sauvegarde de bases de donn&#233;es au format bzip2 (utilitaire pour migration de serveur).&lt;/p&gt;

-
&lt;a href="https://tech.gamuza.fr/-scripts-et-commandes-sh-.html" rel="directory"&gt;Scripts sh&lt;/a&gt;

/ 
&lt;a href="https://tech.gamuza.fr/+-bash-+.html" rel="tag"&gt;bash&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-linux-+.html" rel="tag"&gt;Linux&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-mysql-+.html" rel="tag"&gt;MySQL&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-script-sh-+.html" rel="tag"&gt;script sh&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Base :&lt;/h2&gt;
&lt;p&gt;Lorsque l'on administre un serveur web (sous Linux), t&#244;t o&#249; tard on se retrouve confront&#233; &#224; la n&#233;cessit&#233; de faire la sauvegarde d'une ou plusieurs bases de donn&#233;es MySQL. &lt;br class='autobr' /&gt;
Le script suivant permet de minimiser les r&#233;p&#233;titions : il r&#233;alise le dump au format bzip2 de la base de donn&#233;es dont on a pass&#233; le nom en param&#232;tre. Le dossier de destination est configurable dans le script.&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='19' class='spip_cadre spip_cadre_block' dir='ltr'&gt;#!/bin/bash # mydump.sh # script pour dump + bzip2 d'une bdd # le nom de la bdd est pass&#233; en param&#232;tre au script # exemple: ./mydump.sh la_base_a_dumper # configuration # chemin du dossier de stockage des dumps CHEMIN_DUMPS=/home/technique/dumps_sauvegardes # nom et mot de passe de l'utilisateur MySQL USER_MYSQL=toto PASS_MYSQL=&#034;super_secret&#034; # creer la base de donnees: utiliser -B comme parametre echo &#034;dump + gzip de $1 dans $CHEMIN_DUMPS/$1.sql.bz2&#034; mysqldump -u $USER_MYSQL --password=$PASS_MYSQL -B --opt $1 | bzip2 -c -1 &gt; $CHEMIN_DUMPS/$1.sql.bz2&lt;/textarea&gt;
&lt;p&gt;A lancer dans un tmux (ou screen) si vos bases sont grosses et/ou votre connexion ssh peu fiable...&lt;/p&gt;
&lt;p&gt;Pour la restauration d'un ensemble de sauvegardes bzipp&#233;s, voir &lt;a href='https://tech.gamuza.fr/un-script-pour-restaurer-un-ensemble-de-dumps-mysql.html' class=&#034;spip_in&#034;&gt;Myextract : un script pour restaurer un ensemble de dumps MySQL&lt;/a&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Pour aller plus loin :&lt;/h2&gt;
&lt;p&gt;On peut vouloir automatiser un peu plus la sauvegarde en passant un fichier listant toutes les bases &#224; sauver, fichier g&#233;n&#233;r&#233; &#224; partir de la liste des bases pr&#233;sentes sur le serveur.&lt;/p&gt;
&lt;p&gt;Le sc&#233;nario &#034;&#233;volu&#233;&#034; pourrait donc &#234;tre :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; g&#233;n&#233;rer le fichier &lt;strong&gt;liste_bases.txt&lt;/strong&gt; listant toutes les bases : &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;mysql -utoto -p&#034;super_secret&#034; -e 'show databases;' &gt; liste_bases.txt&lt;/textarea&gt;
&lt;p&gt;Le fichier obtenu liste l'ensemble des bases pr&#233;sentes, une par ligne.&lt;/p&gt;
&lt;/li&gt;&lt;li&gt; &#233;diter le fichier et enlever les bases qui ne sont pas &#224; sauvegarder (phpmyadmin, performance_schema, mysql...)&lt;/li&gt;&lt;li&gt; lancer &lt;strong&gt;mydump.sh&lt;/strong&gt; en boucle sur toutes les tables restant dans le fichier &lt;strong&gt;liste_bases.txt&lt;/strong&gt; : &lt;textarea readonly='readonly' cols='40' rows='3' class='spip_cadre spip_cadre_block' dir='ltr'&gt;for i in &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;cat liste_bases.txt&lt;/code&gt;;do ./mydump.sh $i;done&lt;/textarea&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Cr&#233;er et configurer une paire de cl&#233;s SSH pour la synchronisation entre 2 serveurs</title>
		<link>https://tech.gamuza.fr/creer-et-configurer-une-paire-de-cles-ssh-pour-la-synchronisation-entre-2-serveurs.html</link>
		<guid isPermaLink="true">https://tech.gamuza.fr/creer-et-configurer-une-paire-de-cles-ssh-pour-la-synchronisation-entre-2-serveurs.html</guid>
		<dc:date>2015-10-01T12:12:40Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Christophe</dc:creator>


		<dc:subject>ssh</dc:subject>
		<dc:subject>Debian</dc:subject>
		<dc:subject>bash</dc:subject>
		<dc:subject>tutoriel</dc:subject>

		<description>&lt;p&gt;&lt;strong&gt;Tutoriel&lt;/strong&gt; : l'objectif est de cr&#233;er une paire de cl&#233;s SSH qui permettra de r&#233;aliser des backups (avec rsync, ...) entre 2 serveurs.&lt;/p&gt;

-
&lt;a href="https://tech.gamuza.fr/-configuration-d-un-serveur-debian-.html" rel="directory"&gt;Debian&lt;/a&gt;

/ 
&lt;a href="https://tech.gamuza.fr/+-ssh-+.html" rel="tag"&gt;ssh&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-debian-+.html" rel="tag"&gt;Debian&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-bash-+.html" rel="tag"&gt;bash&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-tutoriel-+.html" rel="tag"&gt;tutoriel&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt;
&lt;h2 class=&#034;spip&#034;&gt;Cr&#233;ation d'un user sp&#233;cifique sur les 2 serveurs&lt;/h2&gt;
&lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;useradd --home /home/toto --password mon_super_motdepasse toto&lt;/textarea&gt;&lt;/li&gt;&lt;li&gt;
&lt;h2 class=&#034;spip&#034;&gt;Du serveur de production (PROD) vers le serveur de backup (SAUVE)&lt;/h2&gt;
&lt;p&gt;&lt;small&gt;&lt;strong&gt;Remarque&lt;/strong&gt; : dans toutes les commandes ssh, l'option &lt;strong&gt;-p&lt;/strong&gt; permet de pr&#233;ciser le port de connexion ssh si diff&#233;rent de 22.&lt;/small&gt;&lt;/p&gt;
&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;strong&gt;Sur le serveur PROD :&lt;/strong&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; G&#233;n&#233;rer une paire de cl&#233;s publique/priv&#233;e sans mot de passe avec le compte utilis&#233; pour la synchro (toto par ex)&lt;br class='manualbr' /&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;ssh-keygen -t rsa&lt;/textarea&gt;
&lt;p&gt;&lt;br class='manualbr' /&gt;&lt;strong&gt;nom du fichier de cl&#233;&lt;/strong&gt; =/home/toto/.ssh/ id_rsa_rsync&lt;br class='manualbr' /&gt;&lt;strong&gt;pass&lt;/strong&gt; = vide pour connexion auto de rsync&lt;/p&gt;
&lt;/li&gt;&lt;li&gt; Envoyer sa cle priv&#233; sur le serveur SAUVE &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;ssh-copy-id -i ~/.ssh/id_rsa_rync.pub '-p 1234 toto@serveur-sauve.tld'&lt;/textarea&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Sur le serveur SAUVE :&lt;/strong&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Ajouter les options de limitation de connexion en d&#233;but de la ligne de la cl&#233; dans le fichier authorized_keys : &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;from=&#034;1.2.3.4,...liste des IP autoris&#233;es s&#233;par&#233;es par une virgule&#034;&lt;/textarea&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Sur le serveur PROD :&lt;/strong&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Tester la connexion vers SAUVE avec la cl&#233; : &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;ssh -i /home/toto/id_rsa_rsync -p 1234 toto@serveur-sauve.tld&lt;/textarea&gt;&lt;/li&gt;&lt;li&gt; Tester le rsync via ssh + fichier de la cl&#233; priv&#233;e : (dans /home/toto on cr&#233;e un r&#233;p /test avec 1 ou 2 fichiers dedans) &lt;textarea readonly='readonly' cols='40' rows='5' class='spip_cadre spip_cadre_block' dir='ltr'&gt;mkdir test cd test touch fichier1 fichier2 rsync -e &#034;ssh -i /home/toto/.ssh/id_rsa_rsync -p 1234&#034; ./* toto@serveur-sauve.tld:/home/toto&lt;/textarea&gt;
&lt;p&gt;On doit retrouver tous les fichiers de /test de la source dans le dossier /toto du serveur de SAUVE&lt;/p&gt;
&lt;/li&gt;&lt;li&gt; Cr&#233;er un fichier cron_synchro.sh dans /home/toto et le rendre ex&#233;cutable &lt;textarea readonly='readonly' cols='40' rows='3' class='spip_cadre spip_cadre_block' dir='ltr'&gt;#!/bin/bash rsync -e &#034;ssh -i /home/toto/.ssh/id_rsa_rync -p 1234&#034; -az /home/toto/test/ toto@serveur-sauve.tld:/home/toto&lt;/textarea&gt;&lt;/li&gt;&lt;li&gt; G&#233;n&#233;rer le crontab de toto pour lancer cron.sh (par ex ici &#224; 1h12 toutes les nuits) &lt;textarea readonly='readonly' cols='40' rows='3' class='spip_cadre spip_cadre_block' dir='ltr'&gt;crontab -e 12 1 * * * cd ~/ &amp;&amp; ./cron_synchro.sh &gt; /dev/null&lt;/textarea&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>G&#233;n&#233;rer un fichier de commandes SVN et GIT pour l'installation d'un ensemble de plugins &#224; partir de ceux d'un SPIP existant</title>
		<link>https://tech.gamuza.fr/Generer-un-fichier-de-commandes-SVN-et-GIT-pour-l-installation-d-un-ensemble-de.html</link>
		<guid isPermaLink="true">https://tech.gamuza.fr/Generer-un-fichier-de-commandes-SVN-et-GIT-pour-l-installation-d-un-ensemble-de.html</guid>
		<dc:date>2015-09-28T22:54:26Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>clem</dc:creator>


		<dc:subject>Debian</dc:subject>
		<dc:subject>bash</dc:subject>
		<dc:subject>svn</dc:subject>
		<dc:subject>script sh</dc:subject>

		<description>&lt;p&gt;&lt;strong&gt;But du script&lt;/strong&gt; : &#224; partir du r&#233;pertoire des plugins d'un SPIP existant, g&#233;n&#233;rer un script sh qui permet l'installation (par svn checkout... et git clone...) des m&#234;me plugins dans un autre SPIP.&lt;/p&gt;

-
&lt;a href="https://tech.gamuza.fr/-scripts-et-commandes-sh-.html" rel="directory"&gt;Scripts sh&lt;/a&gt;

/ 
&lt;a href="https://tech.gamuza.fr/+-debian-+.html" rel="tag"&gt;Debian&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-bash-+.html" rel="tag"&gt;bash&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-svn-+.html" rel="tag"&gt;svn&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-script-sh-+.html" rel="tag"&gt;script sh&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Pour le d&#233;tail de la construction de la commande sed (qui est le truc compliqu&#233; de l'affaire...) voir : &lt;br class='autobr' /&gt;
&lt;a href=&#034;http://www.commentcamarche.net/faq/9558-sed-introduction-a-sed-part-iii#effacement-d-une-ligne-et-insertion-plus-loin&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://www.commentcamarche.net/faq/...&lt;/a&gt;&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='33' class='spip_cadre spip_cadre_block' dir='ltr'&gt;#!/bin/bash # # G&#233;n&#232;re un sh avec les &#034;git clone&#034; de tous les plugins d'un SPIP # # chaque ligne du fichier g&#233;n&#233;r&#233;e est de la forme: # git clone https://github.com/nom_repo/nom_plugin.git nom_plugin # # ce fichier sera lanc&#233; dans le rep plugins/ d'un SPIP # # chemin du r&#233;pertoire des plugins du SPIP REP_PLUGINS=./ # chemin du fichier sh &#224; cr&#233;er FICHIER_SH=./dupliquer_plugins.sh # initialiser le fichier echo &#034;# commandes des plugins a installer&#034; &gt; $FICHIER_SH for i in &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ls $REP_PLUGINS&lt;/code&gt;; do if [ -d $REP_PLUGINS/$i/.git ]; then grep &#034;url&#034; $REP_PLUGINS/$i/.git/config |sed 's/.*url = /git clone /;s/.*\/\([^\/]*\).git$/\0 \1/' &gt;&gt;&gt; fi done # passer le fichier sh en executable chmod +x $FICHIER_SH&lt;/textarea&gt;
&lt;p&gt;Une fois ce script lanc&#233; en &#233;tant dans le sous dossier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;plugins&lt;/code&gt;, on r&#233;cup&#232;re le fichier &lt;strong&gt;dupliquer_plugins.sh&lt;/strong&gt; g&#233;n&#233;r&#233; dont le contenu ressemblera &#224; :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='10' class='spip_cadre spip_cadre_block' dir='ltr'&gt;svn co svn://zone.spip.org/spip-zone/_plugins_/acces_restreint/trunk acces_restreint svn co svn://zone.spip.org/spip-zone/_plugins_/adaptive_images/trunk adaptive_images git clone https://github.com/nursit/home.git home svn co svn://zone.spip.org/spip-zone/_plugins_/agenda/trunk agenda svn co svn://zone.spip.org/spip-zone/_plugins_/alias alias git clone https://github.com/nursit/bank.git bank ...&lt;/textarea&gt;
&lt;p&gt;Il ne reste plus qu'a transf&#233;rer ce fichier dans le r&#233;pertoire &lt;strong&gt;plugins/&lt;/strong&gt; du nouveau SPIP, et le lancer en ligne de commande pour avoir les m&#234;mes plugins install&#233;s.&lt;br class='autobr' /&gt;
On peut &#233;galement d&#233;cider de supprimer un certain nombre de lignes correspondantes aux plugins que l'on ne souhaite pas installer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TODO :&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; ajouter la r&#233;cup&#233;ration de la branch git en cours : cf &lt;a href=&#034;https://stackoverflow.com/a/11868440&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://stackoverflow.com/a/11868440&lt;/a&gt; &lt;textarea readonly='readonly' cols='40' rows='3' class='spip_cadre spip_cadre_block' dir='ltr'&gt;git rev-parse --abbrev-ref HEAD ou git status | head -1&lt;/textarea&gt;
&lt;p&gt;et int&#233;grer l'appel de branche dans le git clone :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;git clone --branche xxxx url&lt;/textarea&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Alternative si vos plugins ne sont pas install&#233;s en ligne de commande :&lt;/strong&gt;&lt;br class='autobr' /&gt;
voir l'astuce d'Eliaz blog : &lt;a href=&#034;https://www.weblog.eliaz.fr/article118.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Migrer facilement ses plugins d'un SPIP &#224; un autre&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Sortir un fichier texte avec la liste de toutes les URLs des d&#233;pots SVN des plugins d'un SPIP</title>
		<link>https://tech.gamuza.fr/sortir-un-fichier-texte-avec-la-liste-de-toutes-les-urls-des-depots-svn-des-plugins-d-un-spip.html</link>
		<guid isPermaLink="true">https://tech.gamuza.fr/sortir-un-fichier-texte-avec-la-liste-de-toutes-les-urls-des-depots-svn-des-plugins-d-un-spip.html</guid>
		<dc:date>2015-09-26T17:08:34Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>clem</dc:creator>


		<dc:subject>Debian</dc:subject>
		<dc:subject>bash</dc:subject>
		<dc:subject>svn</dc:subject>
		<dc:subject>script sh</dc:subject>

		<description>&lt;p&gt;&lt;strong&gt;But du script :&lt;/strong&gt; r&#233;cup&#233;rer dans un fichier texte la totalit&#233; des URLs des d&#233;pots SVN d'un SPIP. Cette liste pourra &#234;tre utilis&#233;e pour automatiser l'installation du m&#234;me stock de plugins dans un autre SPIP.&lt;/p&gt;

-
&lt;a href="https://tech.gamuza.fr/-scripts-et-commandes-sh-.html" rel="directory"&gt;Scripts sh&lt;/a&gt;

/ 
&lt;a href="https://tech.gamuza.fr/+-debian-+.html" rel="tag"&gt;Debian&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-bash-+.html" rel="tag"&gt;bash&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-svn-+.html" rel="tag"&gt;svn&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-script-sh-+.html" rel="tag"&gt;script sh&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;textarea readonly='readonly' cols='40' rows='14' class='spip_cadre spip_cadre_block' dir='ltr'&gt;#!/bin/bash
#
# r&#233;cup&#233;rer un txt avec les URL SVN de tous les plugins du r&#233;pertoire plugins/ d'un SPIP
# # chemin du r&#233;pertoire des plugins du SPIP
REP_PLUGINS=/var/www/ma-mutu.tld/plugins # chemin du fichier txt &#224; cr&#233;er
FICHIER_TXT=/home/clem/liste_urls_svn_plugins.txt svn info $REP_PLUGINS/* |grep &#034;^URL&#034; &gt; $FICHIER_TXT&lt;/textarea&gt;
&lt;p&gt;On peut aller plus loin dans l'automatisation du transfert d'un ensemble de plugins install&#233;s avec SVN en g&#233;n&#233;rant directement le fichier sh de checkout &#224; partir de ce svn info : voir &lt;a href='https://tech.gamuza.fr/Generer-un-fichier-de-commandes-SVN-et-GIT-pour-l-installation-d-un-ensemble-de.html' class=&#034;spip_in&#034;&gt;G&#233;n&#233;rer un fichier de commandes SVN et GIT pour l'installation d'un ensemble de plugins &#224; partir de ceux d'un SPIP existant&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
