Change screen position

This commit is contained in:
Jeremy Gardais 2016-10-14 09:40:07 +02:00
parent 63fff3f4c3
commit 587c2731b1
35 changed files with 2957 additions and 6 deletions

358
SoustitreDownloader.php Executable file
View File

@ -0,0 +1,358 @@
<?php
/**
* SoustitreDownlaoder
*
* Ce script PHP permet de télécharger des sous-titres automatiques à partir du site addic7ed.com
*
* PHP 5
*
* @copyright Copyright 2013, Spikto, Thomas Buée
*/
//ini_set("display_errors", "1");
set_time_limit(0);
$app = new getFileSubtitle($argv);
/**
* Gestion des sous-titres à télécharger
*/
class getFileSubtitle {
private $extFile = array("mp4","mkv","m4v","avi","mov","wmv","mpg");
private $fileToCheck=array();
private $pathSearch;
private $pathMove;
private $createFolder=false;
private $forceDownload=false;
public function __construct($argv) {
$this->pathSearch = (isset($argv[1]) ? $argv[1] : "");
$this->pathMove = (isset($argv[2]) ? $argv[2] : "");
if (isset($argv[3])) {
for($i=0;$i<strlen($argv[3]);$i++) {
if ($argv[3][$i]=="f") $this->createFolder=true;
if ($argv[3][$i]=="d") $this->forceDownload=true;
}
}
$this->logicPath();
$this->findFile();
$this->findSubtitle();
}
public function logicPath() {
if ($this->pathSearch!="" && substr($this->pathSearch, -1)!="/") $this->pathSearch .= "/";
if ($this->pathMove!="" && substr($this->pathMove, -1)!="/") $this->pathMove .= "/";
}
/**
* Recherche des sous-titres à télécharger
*/
public function findFile() {
$path = $this->pathSearch;
if ($path!="") {
$list = glob_perso($path);
foreach($list as $l) {
$info = pathinfo($l);
if (is_file($l) && in_array($info["extension"], $this->extFile) && !preg_match("#VOSTF|VOSTFR#i", $info["filename"])) {
if (!file_exists($path.$info["filename"].".srt")) {
$this->fileToCheck[] = new fileData($info);
}
else if ($this->pathMove!="") {
$data = new fileData($info);
$this->relocateEpisode($data);
}
}
else if (is_dir($l)) {
$data = new fileData($info);
if ($data->isValid()) {
$sublist = glob_perso($l."/");
foreach($sublist as $sl) {
$info = pathinfo($sl);
if (is_file($sl) && in_array($info["extension"], $this->extFile) && !preg_match("#VOSTF|VOSTFR#i", $info["filename"])) {
rename($sl, $path.$info["basename"]);
$info = pathinfo($path.$info["basename"]);
$this->fileToCheck[] = new fileData($info);
}
elseif (is_file($sl)) {
unlink($sl);
}
}
rmdir($l."/");
}
}
}
}
}
/**
* Déplace le fichier dans le dossier approprié : Série [ > Saison] > Episode
*/
public function relocateEpisode($data) {
$comp = "";
if (file_exists($this->pathMove.$data->serie)) {
$comp .= $data->serie;
}
elseif ($this->createFolder && !file_exists($this->pathMove.$data->serie)) {
mkdir($this->pathMove.$data->serie);
$comp .= $data->serie;
}
if ($comp!="") {
if (file_exists($this->pathMove.$data->serie."/Saison ".intval($data->saison))) $comp .= "/Saison ".intval($data->saison);
elseif (file_exists($this->pathMove.$data->serie."/Season ".intval($data->saison))) $comp .= "/Season ".intval($data->saison);
}
rename($this->pathSearch.$data->info["basename"], $this->pathMove.$comp."/".$data->info["basename"]);
rename($this->pathSearch.$data->info["filename"].".srt", $this->pathMove.$comp."/".$data->info["filename"].".srt");
}
/**
* Recherche du sous-titre
*/
public function findSubtitle() {
if (count($this->fileToCheck)>0) {
foreach($this->fileToCheck as $f) {
$addicted = new addictedSubtitle($f, $this->forceDownload);
if ($addicted->findEpisode()) {
if ($this->pathMove!="") {
$this->relocateEpisode($f);
}
echo "Un sous-titre a été trouvé\n";
}
else {
echo "Aucun sous-titre trouvé\n";
}
}
}
else {
echo "Aucun sous-titre à rechercher.\n";
}
}
}
/**
* Recupère les infos importantes à partir du nom du fichier
*/
class fileData {
public $saison;
public $episode;
public $serie;
public $version;
public $info;
public function __construct($info) {
$this->info = $info;
$this->readName();
}
public function readName() {
$file = $this->info["filename"];
//preg_match("#([^0-9]+)([0-9]{2})E([0-9]{2})#", $file, $result2);
if (preg_match("#S([0-9]{2})E([0-9]{2})#msui", $file, $result)) {
$this->saison = $result[1];
$this->episode = $result[2];
if (preg_match("#(.*)S".$this->saison."E".$this->episode."#msui", $file, $result2)) {
$this->serie = ucwords(trim(str_replace(".", " ", $result2[1])));
}
}
else if (preg_match("#([0-9]{1,2})x([0-9]{2})#", $file, $result)) {
$this->saison = $result[1];
$this->episode = $result[2];
if (preg_match("#(.*)".$this->saison."x".$this->episode."#", $file, $result2)) {
$this->serie = ucwords(trim(str_replace(".", " ", $result2[1])));
}
}
else if (preg_match_all("#[. ]([0-9])([0-9]{2})[. ]#", $file, $result, PREG_SET_ORDER)) {
$result = end($result);
$this->saison = ($result[1]<10 ? "0".$result[1] : $result[1]);
$this->episode = $result[2];
if (preg_match("#(.*)".$result[1].$this->episode."#", $file, $result2)) {
$this->serie = ucwords(trim(str_replace(".", " ", $result2[1])));
}
}
preg_match("#(LOL|AFG|FQM|ASAP|EVOLVE|IMMERSE|2HD|KILLERS)#msui", $file, $result3);
$this->version = strtoupper(isset($result3[1]) ? $result3[1] : "");
}
public function getSimpleName() {
return $this->serie." ".$this->saison."x".$this->episode;
}
public function isValid() {
return ($this->serie!="" && $this->saison!="" && $this->episode);
}
}
/**
* Base de source pour le téléchargement des sous-titres
*/
class sourceSubtitle {
public $base;
public $referer;
public $search;
public $forceExistant;
public function __construct($search, $force = false) {
$this->search = $search;
$this->forceExistant = $force;
}
protected function getDataFromLink($link) {
$cpt = 0;
$return = false;
while($return==false && $cpt<3) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $this->base.$link);
//curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_COOKIESESSION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 120);
if ($this->referer!="") curl_setopt($curl, CURLOPT_REFERER, $this->referer);
$return = curl_exec($curl);
curl_close($curl);
$cpt++;
}
$this->referer = $this->base.$link;
return $return;
}
public function findEpisode($nom) {
}
public function findSubtitle($link) {
}
public function saveSubtitle($lien) {
}
}
/**
* Source Addic7ed.com
*/
class addictedSubtitle extends sourceSubtitle {
public $base = "http://www.addic7ed.com/";
public function findEpisode() {
$episodes = $this->getDataFromLink("search.php?search=".rawurlencode($this->search->getSimpleName())."&Submit=Search");
preg_match("#<a href=\"([^\"]*)\"[^>]*>".$this->search->serie."[^<]*".$this->search->saison."x".$this->search->episode."[^<]*</a>#", $episodes, $result);
if (count($result)>0) {
return $this->findSubtitle($result[1]);
}
else {
preg_match("#<a href=\"([^\"]*)\".*>.*".$this->search->saison."x".$this->search->episode.".*</a>#", $episodes, $result);
if (count($result)>0) {
return $this->findSubtitle($result[1]);
}
}
return false;
}
public function findSubtitle($link) {
$soustitres = $this->getDataFromLink($link);
$blocs = explode("<div id=\"container95m\">", $soustitres);
$linkSubtitle="";
$completedLink = array();
foreach ($blocs as $b) {
$valid = true;
preg_match_all("#\/updated\/8\/([0-9/]*)#", $b, $resultLink);
foreach($resultLink[1] as $l) {
$resultVersion = array();
$dec = explode("/", $l);
preg_match_all("#Version ".($this->search->version!="" ? "(".$this->search->version.")" : "([^<]*)").".*starttranslation.php\?id=".$dec[0]."&amp;fversion=".$dec[1]."\".*saveFavorite\(".$dec[0].",8,[0-9]*\).*([0-9]{0,2}\.?[0-9]{0,2}%? ?Completed).*\/updated\/8\/(".$dec[0]."\/".$dec[1].")\"#msui", $b, $resultVersion, PREG_SET_ORDER);
if (count($resultVersion) == 0) {
preg_match_all("#Version [^<]*.*starttranslation.php\?id=".$dec[0]."&amp;fversion=".$dec[1]."\".*Works with ".($this->search->version!="" ? "[^<]*(".$this->search->version.")[^<]*" : "[^<]*").".*saveFavorite\(".$dec[0].",8,[0-9]*\).*([0-9]{0,2}\.?[0-9]{0,2}%? ?Completed).*\/updated\/8\/(".$dec[0]."\/".$dec[1].")\"#msui", $b, $resultVersion, PREG_SET_ORDER);
}
if (count($resultVersion) == 0) {
preg_match_all("#Version ([^<]*).*starttranslation.php\?id=".$dec[0]."&amp;fversion=".$dec[1]."\".*saveFavorite\(".$dec[0].",8,[0-9]*\).*([0-9]{0,2}\.?[0-9]{0,2}%? ?Completed).*\/updated\/8\/(".$dec[0]."\/".$dec[1].")\"#msui", $b, $resultVersion, PREG_SET_ORDER);
}
if (count($resultVersion) > 0) {
if (!preg_match("#saveFavorite\(".$dec[0].",8,[0-9]*\).*[0-9]*\.[0-9]*% Completed.*\/updated\/8\/(".$dec[0]."\/".$dec[1].")#msui", $b)) {
$completedLink[] = "updated/8/".$l;
}
else {
$valid = false;
}
if ($this->search->version!="") {
if (strpos($resultVersion[0][1], $this->search->version)!==false) {
$completedLink[] = "updated/8/".$l;
}
else {
$valid = false;
}
}
}
else {
$valid = false;
}
if ($valid) {
$linkSubtitle = "updated/8/".$l;
break;
}
}
if ($valid && $linkSubtitle!="") break;
}
if ($this->forceExistant && $linkSubtitle=="" && !empty($completedLink)) {
$linkSubtitle = $completedLink[0];
}
if ($linkSubtitle!="") {
return $this->saveSubtitle($linkSubtitle);
}
return false;
}
public function saveSubtitle($link) {
$soustitre = $this->getDataFromLink($link);
if ($soustitre!="") {
$fp = fopen($this->search->info["dirname"]."/".$this->search->info["filename"].".srt", "a+");
fwrite($fp, $soustitre);
fclose($fp);
return true;
}
return false;
}
}
function glob_perso($path, $folder=array()) {
$globalPath;
$list = array();
if (!empty($folder)) {
if (!is_array($folder)) $folder = array($folder);
foreach ($folder as $value) {
if (file_exists($path.$value)) {
$path = $path.$value;
}
else {
$handle = opendir($path);
if ($handle) {
while (false !== ($entry = readdir($handle))) {
if (strtolower($entry)==strtolower($value)) {
$path = $path.$entry."/";
}
}
closedir($handle);
}
}
}
}
$globalPath = $path;
if (file_exists($globalPath)) {
$handle = opendir($globalPath);
if ($handle) {
while (false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != "..") {
$list[] = $globalPath.$entry;
}
}
closedir($handle);
}
}
return $list;
}

389
backup_config.sh Executable file
View File

@ -0,0 +1,389 @@
#!/bin/sh
################################################################################################
##
## Nom: backup_config.sh
##
## Version: 0.4
##
## Licence: Creative Commons
##
## Comportement: Sauvegarde l'ensemble des éléments de configuration de mon système Debian
## Le script peut-être exécuté en root ou en utilisateur principal. Le premier permettra
## de sauvegarder certains fichiers dont lui seul a l'accès. Et le second permettra de
## sauvegarder uniquement les fichiers de son répertoire utilisateur.
## Deux modes d'exécution sont également disponible:
## - backup: pour sauvegarder les fichiers en fonction de l'utilisateur
## - restore: pour restaurer les fichiers en fonction de l'utilisateur
##
##
##
##
################################################################################################
##
## Date de création: 28-12-2011
##
## Auteur: Gardouille
##
##
## Dernière modifications:
## 28-12-2011 - 0.1:
## - Création
# **********************************************************************************************
## 2012/02/28 - 0.5.1:
## - Ajout de la configuration de tmux
## - Ajout de la sauvegarde des icônes
## 2012/01/12 - 0.4:
## - Ajout de la sauvegarde de la configuration de tint2
## - Ajout de la sauvegarde de la configuration de gsimplecal (calendrier graphique tout simple)
## - Ajout de la sauvegarde de la configuration de roxterm
## - Pour le moment, roxterm est uniquement utilisé avec dmenu faute de pouvoir utiliser la touche "tab" dans les raccourcis clavier.
## - Ajout de la sauvegarde d'Openbox
## 2012/01/11 - 0.3:
## - Ajout de la sauvegarde du script pour lancer dmenu
## 2012/01/05 - 0.2:
## - Ajout de la sauvegarde du fichier principal de devtodo
## - Ajout de la sauvegarde du répertoire personnel pour le jeu vvvvvv
##
# **********************************************************************************************
## À Modifier:
## - Ajouter le mode restore
## - La config dmenu via le Alt+F3
## - Ajouter la config de fbpanel
##
##
################################################################################################
# **********************************************************************************************
#
# Variables globales
#
# -----------------------------------------------------------
# Répertoire de l'utilisateur principal
USER_DIR="/home/$USER"
# Emplacement de stockage des fichiers des fichiers systèmes à sauvegarder
#BKP_DIR="/media/data/test_backup"
BKP_DIR="/media/backup/config_file-`date +%y-%m-%d`"
# Emplacement de stockage des fichiers de l'utilisateur
#BKP_DIR_USER="/media/data/test_backup/home"
BKP_DIR_USER="/media/backup/config_file-`date +%y-%m-%d`/home"
## Choix du mode d'exécution du script:
## Niveau 0 (mode_debug=0)
# Exécution automatique avec normalement aucune interaction avec l'utilisateur.
## Niveau 1 (mode_debug=1)
# ...
## Niveau 2 (mode_debug=2)
# L'installation n'est pas en automatique (aptitude, ...)
# La sortie des différentes commandes est envoyée sur la sortie standard
mode_debug=2
case "$mode_debug" in
0) ## Niveau minimum
# La sortie standard sera redirigée dans un fichier de log
sortie="> /dev/null 2> \"${fichier_erreur}\""
;;
1) ## Niveau moyen
# La sortie standard sera quand même affichée
sortie="2> \"${fichier_erreur}\""
;;
2) ## Niveau maximum
# Le résultat des commandes reste sur la sortie standard
sortie=""
;;
esac
## Fichier contenant les dernières erreurs
fichier_erreur="/tmp/erreur_backup_config.sh.tmp"
touch "${fichier_erreur}"
# Fin des variables globales
# -----------------------------------------------------------
# **********************************************************************************************
# **********************************************************************************************
#
# Fichiers globaux
#
# -----------------------------------------------------------
#
# Fin des fichiers globaux
# -----------------------------------------------------------
# **********************************************************************************************
# **********************************************************************************************
#
# Fonctions globales
#
# -----------------------------------------------------------
## Fonction de sauvegarde
# Prototype: backup $1 $2 $3 [$4]
# $1: Description de la sauvegarde
# $2: Répertoire/fichier à sauvegarder
# $3: Emplacement où stocker le répertoire/fichier
# $4: Filtre à appliquer si présent
backup()
{
if [ ! -d $3 ]; then # Si l'emplacement de sauvegarde n'existe pas
echod "Creation de $3"
mkdir -p $3
fi
echod "Sauvegarde de $1"
if [ $4 ]; then
# Synchronisation avec le filtre
#rsync -rl --delete --filter "- $4" $2 $3
rsync -rlpgoD --delete --filter "- $4" $2 $3
else
# Synchronisation classique
#rsync -rl --delete $2 $3
rsync -rlpgoD --delete $2 $3
fi
# r: Récurif dans les répertoires
# l: Copier les liens comme des liens
# Pour appliquer l'option -a (rlptgoD), il faudrait copier les données sur le même type de partition et non pas sur du ntfs/fat
}
## Fonction de restauration
# Prototype: restore $1 $2 $3
# $1: Répertoire/fichier à restaurer
# $2: Emplacement où restaurer le répertoire/fichier
# $3: Droits sur le répertoire/fichier
#restore()
#{
#}
# Possibilité d'utiliser cp
#cp --preserve=mode,ownership,timestamps ...
## Fonction d'affichage en fonction du mode debug choisi
echod() { [ "$mode_debug" -ge 2 ] && echo "(DEBUG) $*" ; }
echok() { [ "$mode_debug" -ge 2 ] && echo "(ok) $*" ; }
echoi() { [ "$mode_debug" -ge 1 ] && echo "(ii) $*" ; }
echow() { [ "$mode_debug" -ge 1 ] && echo "(!!) $*" ; }
echnk() { [ "$mode_debug" -ge 0 ] && echo "(EE) $*" ; }
# Fin des fonctions globales
# -----------------------------------------------------------
# **********************************************************************************************
# **********************************************************************************************
#
# Programme principale
#
# -----------------------------------------------------------
# Vérification de l'existence des emplacements de sauvegarde
if [ ! -d $BKP_DIR ] || [ ! -d $BKP_DIR_USER ]; then
echo << EOF "
L'un des emplacements de sauvegarde spécifié n'existe pas:
- $BKP_DIR
ou
- $BKP_DIR_USER
Vérifier si les variable BKP_DIR et BKP_DIR_USER contiennent les bonnes valeurs.
Si c'est le cas, merci de créer manuellement les répertoires."
EOF
exit 1
fi
case "$1" in
backup)
if [ "${USER}" = "root" ]; then # Si le script est exécuté en root
echo "Exécution de la sauvegarde en tant que root"
## Répertoire /etc
# APT
backup "APT" /etc/apt/sources.list $BKP_DIR/etc/apt/
# Fichier fstab
backup "fstab" /etc/fstab $BKP_DIR/etc/
# Fichier hosts
backup "hosts" /etc/hosts $BKP_DIR/etc/
# Fichier interfaces (réseau)
backup "interfaces" /etc/network/interfaces $BKP_DIR/etc/network/
# Samba
backup "Samba" /etc/samba $BKP_DIR/etc/
# ZSH
backup "ZSH" /etc/zsh $BKP_DIR/etc/
backup "dir_colors" /etc/dir_colors $BKP_DIR/etc/
# Répertoire /usr
# VIM (dictionnaire)
# backup /usr/share/vim/vim73/spell/
# Hammerfight (jeux)
backup "Hammerfight" /usr/local/games/hammerfight/Saves $BKP_DIR/usr/local/games/hammerfight/
else # Si c'est un utilisateur "normal"
echo "Exécution de la sauvegarde en tant que $USER"
## Applications
# EOG (Eye Of Gnome)
## Devtodo
# 644/ .todo
backup "Devtodo" "$USER_DIR"/.todo "$BKP_DIR_USER"
## dmenu
# 644
backup "dmenu" "$USER_DIR"/.dmenu "$BKP_DIR_USER"
# Filezilla
backup "Filezilla" "$USER_DIR"/.filezilla "$BKP_DIR_USER"
# Freeplane
backup "Freeplane" "$USER_DIR"/.freeplane "$BKP_DIR_USER"
# Gedit
# Gnome
# Gsimplecal
backup "Gsimplecal" "$USER_DIR"/.config/gsimplecal "$BKP_DIR_USER"/.config/
# Icedove
#backup "Icedove" "$USER_DIR"/.icedove "$BKP_DIR_USER" ImapMail
backup "Icedove" "$USER_DIR"/.icedove "$BKP_DIR_USER"
# Iceweasel
backup "Iceweasel" "$USER_DIR"/.mozilla "$BKP_DIR_USER"
# Extension: Pentadactyl
backup "Pentadactyl" "$USER_DIR"/.pentadactyl "$BKP_DIR_USER"
backup "Pentadactyl" "$USER_DIR"/.pentadactylrc "$BKP_DIR_USER"
# icônes
backup "Icônes" "$USER_DIR"/.icons "$BKP_DIR_USER"
# Irssi
backup "Irssi" "$USER_DIR"/.irssi "$BKP_DIR_USER"
# Jitsi
backup "Jitsi" "$USER_DIR"/.jitsi "$BKP_DIR_USER"
# Lessfilter
backup "Lessfilter" "$USER_DIR"/.lessfilter "$BKP_DIR_USER"
# Libreoffice (templates, dictionnaires, ...)
backup "Libreoffice" "$USER_DIR"/.libreoffice "$BKP_DIR_USER"
# MOC (Music On Console)
backup "MOC" "$USER_DIR"/.moc "$BKP_DIR_USER"
# Modèles de documents
backup "Modeles" "$USER_DIR"/Modeles "$BKP_DIR_USER"
backup "user-dirs.dirs" "$USER_DIR"/.config/user-dirs.dirs "$BKP_DIR_USER"
# Nautilus (script)
backup "nautilus-scripts" "$USER_DIR"/.gnome2/nautilus-* "$BKP_DIR_USER"/.gnome2/
# Openbox
backup "openbox" "$USER_DIR"/.config/openbox "$BKP_DIR_USER"/.config/
# Pidgin (configuration et historique)
backup "Pidgin" "$USER_DIR"/.purple "$BKP_DIR_USER"
# Programme par défaut
backup "Programme par défaut" "$USER_DIR"/.local/share/applications/mimeapps.list "$BKP_DIR_USER"/.local/share/applications
# Pyload
backup "Pyload" "$USER_DIR"/.pyload "$BKP_DIR_USER"
# Rhythmbox (configuration, bibliothèque, ...)
backup "Rhythmbox" "$USER_DIR"/.local/share/rhythmbox "$BKP_DIR_USER"/.local/share/
backup "Rhythmbox" "$USER_DIR"/.gconf/apps/rhythmbox "$BKP_DIR_USER"/.gconf/apps/
# Roxterm
# 755: récursif sur les répertoires
# 644: récursif sur les fichiers
backup "Roxterm" "$USER_DIR"/.config/roxterm.sourceforge.net "$BKP_DIR_USER"/.config/
# Screen
backup "Screen" "$USER_DIR"/.screen "$BKP_DIR_USER"
# Script
backup "Script" "$USER_DIR"/bin "$BKP_DIR_USER"
# SSH
backup "SSH" "$USER_DIR"/.ssh "$BKP_DIR_USER"
# Teamviewer
backup "Teamviewer" "$USER_DIR"/.teamviewer "$BKP_DIR_USER"
# Terminator
backup "Terminator" "$USER_DIR"/.config/terminator "$BKP_DIR_USER"/.config/
# Tmux
backup "Tmux" "$USER_DIR"/.tmux.conf "$BKP_DIR_USER"/
# Transmission
backup "Transmission" "$USER_DIR"/.config/transmission "$BKP_DIR_USER"/.config
# Tsclient
backup "Tsclient" "$USER_DIR"/.tsclient "$BKP_DIR_USER"
# VIM
backup "VIM" "$USER_DIR"/.vim "$BKP_DIR_USER"
backup "VIM" "$USER_DIR"/.vimrc "$BKP_DIR_USER"
## Jeux
# Cave story +
# Hammerfight
# Sauvegarde effectuée par root car nécessite des privilèges
# Minecraft
backup "Minecraft" "$USER_DIR"/.minecraft "$BKP_DIR_USER"
# Minetest
backup "Minetest" "$USER_DIR"/.minetest "$BKP_DIR_USER"
# Shank
# Teeworlds
backup "Teeworlds" "$USER_DIR"/.teeworlds "$BKP_DIR_USER"
# vvvvvv
# 755: .vvvvvv
# 644 pour tous les fichiers
backup "vvvvvv" "$USER_DIR"/.vvvvvv "$BKP_DIR_USER"
fi
;;
* )
echo "Fonctionnement:"
echo "./backup_config.sh backup|restore"
esac # Fin du case
exit 0
# Fin de la boucle principale
# -----------------------------------------------------------
# **********************************************************************************************

280
backup_pirate_usb.sh Executable file
View File

@ -0,0 +1,280 @@
#!/bin/sh
################################################################################################
##
## Nom: backup_pirate_usb.sh
##
## Version: 0.2
##
## Licence: Creative Commons
##
## Comportement: Tentative de sauvegarde de données vers la clé usb en utilisant les
## règles udev
##
##
##
################################################################################################
##
## Date de création: 03-01-2012
##
## Auteur: Gardouille
##
##
## Dernière modifications:
## 03-01-2012 - 0.1:
## - Création du script
## 04-01-2012 - 0.2:
## - Ajout d'une boucle for qui parcourt les fichiers et les créée si nécessaire
## - Utilisation de exec pour rediriger les sorties stdout et stderr
## - cf http://abs.traduc.org/abs-5.0-fr/ch19.html#redir1
## - Création de fonction pour rediriger et restaurer les sorties
## -
# **********************************************************************************************
## //2011 - :
## -
## -
# **********************************************************************************************
## À Modifier:
## - Redéfinir les paramètres choisi en fonction du mode debug pour utiliser les
## fonctions de redirection des sorties
## -
##
##
################################################################################################
# **********************************************************************************************
#
# Variables globales
#
# -----------------------------------------------------------
# 
## Choix du mode d'exécution du script:
## Niveau 0 (mode_debug=0)
# Exécution automatique avec normalement aucune interaction avec l'utilisateur.
## Niveau 1 (mode_debug=1)
# Exécution semi-automatique avec peu d'interaction nécessaire
## Niveau 2 (mode_debug=2)
# La sortie des différentes commandes est envoyée sur la sortie standard
mode_debug=2
case "$mode_debug" in
0) ## Niveau minimum
# La sortie standard sera redirigée dans un fichier de log
redirect_stdout
# La sortie d'erreur sera redirigée dans un fichier d'erreur
redirect_stderr
;;
1) ## Niveau moyen
# Seulement la sortie d'erreur sera redirigée
redirect_stderr
;;
2) ## Niveau maximum
# Le résultat des commandes reste sur la sortie standard
echo "Mode debug"
;;
esac
# Partition à monter
PART="/dev/tipiak"
# Point de montage
MOUNT_POINT="/mnt/bkp_tipiak"
## Répertoire à sauvegarder
DIR="/media/data/config_debian/sid"
## Répertoire où s'effectue la sauvegarde (sur la clé usb)
BKP_DIR="backup"
## Obtenir le volume id d'un périphérique:
#hal-find-by-property --key block.device --string /dev/sdXX
## Obtenir le point de montage d'un périphérique à partir de son volume id:
#MOUNTPOINT=$(hal-get-property --udi /org/freedesktop/Hal/devices/le_volume_uuid_detrminé_precedemment --key volume.mount_point)
# Fin des variables globales
# -----------------------------------------------------------
# **********************************************************************************************
# **********************************************************************************************
#
# Fichiers globaux
#
# -----------------------------------------------------------
## Fichier de log
fichier_log="/tmp/backup_pirate_usb.log"
## Fichier de erreur
fichier_erreur="/tmp/backup_pirate_usb.err"
# Parcourir les fichiers et les créer si nécessaire
for fichier in ${fichier_log} ${fichier_erreur}; do
if [ -f ${fichier} ]; then
rm -f ${fichier}
else
touch ${fichier}
fi
done
# Fin des fichiers globaux
# -----------------------------------------------------------
# **********************************************************************************************
# **********************************************************************************************
#
# Fonctions globales
#
# -----------------------------------------------------------
## Fonction d'affichage en fonction du mode debug choisi
echod() { [ "$mode_debug" -ge 2 ] && echo "(DEBUG) $*" ; }
echok() { [ "$mode_debug" -ge 2 ] && echo "(ok) $*" ; }
echoi() { [ "$mode_debug" -ge 1 ] && echo "(ii) $*" ; }
echow() { [ "$mode_debug" -ge 1 ] && echo "(!!) $*" ; }
echnk() { [ "$mode_debug" -ge 0 ] && echo "(EE) $*" ; }
## Redirection de la sortie standard (stdout) vers le fichier de log
redirect_stdout()
{
# Sauvegarder la valeur de stdout dans le descripteur de fichier 6
exec 6>&1
# stdout remplacé par le fichier de log
exec > ${fichier_log}
}
## Restauration de stdout
restore_stdout()
{
# Test si le descripteur de fichier 6 existe
if [ "$(lsof -a -p $$ -d6 | grep 6)" ]; then
echo "Restauration de stdout et fermeture du descripteur de fichier 6"
# Restaurer stdout et fermer le descripteur de fichier #6
exec 1>&6 6>&-
else
echo "Le descripteur de fichier 6 n'existe pas. stdout est normalement en place"
fi
}
## Redirection de la sortie d'erreur standard (stderr) vers le fichier d'erreur
redirect_stderr()
{
# Sauvegarder la valeur de stderr dans le descripteur de fichier 7
exec 7>&2
# stderr remplacé par le fichier d'erreur
exec 2> ${fichier_erreur}
}
## Restauration de stderr
restore_stderr()
{
# Test si le descripteur de fichier 7 existe
if [ "$(lsof -a -p $$ -d7 | grep 7)" ]; then
echo "Restauration de stderr et fermeture du descripteur de fichier 7"
# Restaurer stderr et fermer le descripteur de fichier #7
exec 2>&7 7>&-
else
echo "Le descripteur de fichier 7 n'existe pas. stderr est normalement en place"
fi
}
## Fonction d'erreur
# Affiche le message relative à la position de l'erreur # Et affiche les erreurs renvoyées
# - Prototype : erreur "MESSAGE_ERREUR"
erreur()
{
## Vérification du code retour de la dernière commande
case "$?" in
0 ) ## Si 0, tout s'est bien passé
> "${fichier_erreur}" ## On vide le fichier d'erreur
;; ## Pas d'erreur
* ) ## Si différent de 0
## On affiche le message relatif à l'erreur
echnk "Erreur lors de: -> ${1} <-"
## Et on arrête le script avec un code retour 1
echnk "/!\\ Arrêt du script /!\\"
exit 1;
;;
esac
}
# Fin des fonctions globales
# -----------------------------------------------------------
# **********************************************************************************************
# **********************************************************************************************
#
# Programme principale
#
# -----------------------------------------------------------
# Vérification du nombre de paramètres, pas besoin de paramètres actuellement
echo "test no redirect 1 "
redirect_stdout
redirect_stderr
echo "Petit sleep de 10 secondes =)"
sleep 10s
echo "test redirect 2 "
# Création du point de montage si il n'existe pas
if [ ! -d $MOUNT_POINT ]; then
echo "Création du point de montage"
mkdir -p $MOUNT_POINT
fi
# Montage de la partition
echo "Montage de la partition"
mount $PART $MOUNT_POINT
# On vérifie si le montage s'est bien effectué
erreur "Montage de la partition"
# Création du répertoire de sauvegarde sur le point de montage
if [ ! -d $MOUNT_POINT/$BKP_DIR ]; then
echo "Création du répertoire de sauvegarde sur le point de montage"
mkdir -p $MOUNT_POINT/$BKP_DIR
fi
# Commande de synchronisation
echo "Début synchronisation"
rsync -rl --delete --stats $DIR $MOUNT_POINT/$BKP_DIR
#rsync -rl --delete --stats $DIR $MOUNT_POINT/$BKP_DIR > ${fichier_log} 2> ${fichier_erreur}
# Commande de synchronisation avec affichage graphique de la progression
#rsync -rl --delete --stats $DIR $MOUNT_POINT/$BKP_DIR | zenity --text-info --title="Updating Podcasts" --width=600 --height=600
echo "Fin synchronisation"
# On donne tous les droits sur les fichiers de logs
echo "Attribution des droits sur les fichiers de log"
chmod 777 ${fichier_log} ${fichier_erreur}
# Démontage de la partition
echo "Démontage de la partition"
umount $MOUNT_POINT
echo "test final redirect 3 "
echo "Restauration des sorties"
restore_stdout
restore_stderr
exit 0
# Fin de la boucle principale
# -----------------------------------------------------------
# **********************************************************************************************

64
bashblock Executable file
View File

@ -0,0 +1,64 @@
#!/bin/bash
RETRIES=0
MAXRETRIES=5
RETRYSLEEP=4
onexit() {
return
}
checkpassword() {
local PASS=${2//$/\\$}
expect << EOF >/dev/null
spawn su $1 -c "exit"
expect "Password:"
send "${PASS}\r"
expect eof
catch wait result
exit [lindex \$result 3]
EOF
}
header() {
clear
echo ""
echo ""
echo ""
echo ""
if [ "${RETRIES}" -ne 0 ]; then
echo "Locked by ${USER} (${RETRIES} failed login attempts)"
else
echo "Locked by ${USER}"
fi
}
authenticate() {
header
local PASSWORD=""
local RETRY=0
while true; do
read -s -p "Password: " PASSWORD
echo
checkpassword ${USER} "${PASSWORD}"
if [ "$?" -eq 0 ]; then
echo "Welcome back!"
echo ""
exit 0
else
RETRIES=$((RETRIES+1))
RETRY=$((RETRY+1))
echo "authentication failed!"
echo ""
if [ "${RETRY}" -ge "${MAXRETRIES}" ]; then
RETRY=0
echo "sleeping for ${RETRYSLEEP}"
sleep ${RETRYSLEEP}
header
fi
fi
done
}
trap onexit 1 2 3 15 18 20 ERR
authenticate

21
bkp_cluster_file Executable file
View File

@ -0,0 +1,21 @@
#!/bin/sh
BKP_DIR="${HOME}/bkp_cluster_files"
SSH_USER="root"
NODES_LIST='r720xd.ipr.univ-rennes1.fr r730xd1.ipr.univ-rennes1.fr r730xd2.ipr.univ-rennes1.fr nec06'
FILES_LIST="/etc/network/interfaces /etc/udev/rules.d/70-persistent-net.rules"
mkdir -p "${BKP_DIR}"
for node in r720xd.ipr.univ-rennes1.fr r730xd1.ipr.univ-rennes1.fr r730xd2.ipr.univ-rennes1.fr nec06; do
mkdir -p "${BKP_DIR}"/"${node}"
for file in "${FILES_LIST}"; do
scp "${SSH_USER}"@"${node}":"${file}" "${BKP_DIR}"/"${node}"/
done
done

113
commandes_utiles Executable file
View File

@ -0,0 +1,113 @@
###Liste de quelques commandes bien utiles à se rappeler:
##Récupérer une clé à partir d'un message d'erreur du type:
W: GPG error: http://ppa.launchpad.net intrepid Release: Les signatures suivantes n'ont pas pu être vérifiées car la clé publique n'est pas disponible : NO_PUBKEY 4874D3686E80C6B7
##Exécuter la commande:
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 4874D3686E80C6B7
###OU:
sudo su -
gpg --keyserver keyserver.ubuntu.com --recv 4874D3686E80C6B7
gpg --export --armor 4874D3686E80C6B7 | apt-key add
##Renommer des fichiers en leurs enlevant une extension:
find . -name *.c | sed -e 's/\(.*\)\.C/mv \1.c \1/' | sh
#Exemple qui recherche tous les fichiers avec l'extension ".c", pour ensuite les renommés sans ".c". Le pipe sh "| sh", permet d'exécuter la commande, si on l'enlève, on verra le résultat sans l'exécuter.
## Redimensionner un groupe d'image
find . -iname "*.jpg" -exec convert -resize 1024x "{}" "{}" \;
## Supprimer un bloc de ligne commençant par DEBUT et se terminant par
#+ par une ligne vide
sed '/DEBUT/,/^$/d' test.txt
# Trouver les derniers fichiers modifiés sur le système dans les 2 dernières minutes
find / -mmin 2
## Rajouter un mot à la fin de plusieurs fichiers
##Voir l'arborescence des processus en cours:
ps faux | less
##Liste des connections actives sur la machine:
netstat -taupeln | less
#PID, nom, port, ip, ...
##Voir la config de java et permet de sélectionner la jvm que l'on veut utiliser
sudo update-alternatives --config java
##Modifier la couleur de l'horloge de gnome:
'Lancer gconf-editor en sudo'
'Aller à la clé /apps/panel/applets/clock_screen0/prefs/'
'Attribuez la valeur "custom" à la clé "format"'
'Appliquer le code suivant à la clé "custom format"'
"<span color="#025EBA">%a %d %b</span> <span color="#cd984a"><b>%H:%M</b></span>"
##Lancer des images ou fichiers pdf à partir du terminal, utiliser Eye of Gnome:
eog /var/log/bootchart/...
##Liste des paquets:
dpkg --get-selections > mes_paquets.txt
##ou aptitude search '~i!~M'
dpkg --set-selections < mes_paquets.txt
###Formatter complètement un disque:
##ATTENTION force l'écriture de 0 sur tous le disque
shred -fzv -n 100 /dev/hda
##Extraire la piste audio d'une vidéo: (.wav)
mplayer video.avi -vc dummy -vo null -ao pcm :file=video.wav
##Convertir un .wav en mp3
lame -h video.wav
##Ne remplacer que la première occurence d'un mot sur une ligne dans un fichier
sed -i 's/mot/MOT/' fichier.txt
##Remplacer toutes les occurences de toutes les lignes d'un mot dans un fichier
sed -i 's/mot/MOT/g/' fichier.txt
##Décommenter une ligne
sed -i 's/^# \(MA LIGNE COMMENTÉE.*\)/\1/' fichier.txt
##Générer une clé d'authentification pour ssh
ssh-keygen -t rsa
##Envoyer la clé sur le serveur distant
ssh-copy-id -i ~/.ssh/id_rsa.pub login@serveur
## Visualiser les systèmes d'exploitation des ordis présents sur le réseau
nmap -O 192.168.0.1-255 | grep "Running:" | sort | uniq -c
# Convertir le format de sous titre:
iconv -f ISO-8859-1 -t utf-8 sous_titre.srt -o sous_titre_utf8.srt
# Afficher les informations d'un fichier mkv:
$ mkvmerge -i movie.mkv
File movie.mkv: container: Matroska
Track ID 1: video (V_MS/VFW/FOURCC, DIV3)
Track ID 2: audio (A_MPEG/L3)
Track ID 3: audio (A_VORBIS)
Track ID 4: subtitles (S_TEXT/UTF8)
Track ID 5: subtitles (S_TEXT/UTF8)
# Extraire une piste d'un fichier mkv:
$ mkvextract tracks movie.mkv 3:audio.ogg 4:subtitles.srt
# Copier un cd en image iso:
dd if=/dev/cdrom of=fichier.iso

143
compile_latex Executable file
View File

@ -0,0 +1,143 @@
#!/bin/sh
################################################################################################
##
## Nom: compile_latex
##
## Licence: Creative Commons
##
## Comportement: Compilation d'un fichier tex, suppression des fichiers temp et affichage du pdf
##
##
##
################################################################################################
##
## Date de création: 26/01/2011
##
## Auteur: Gardouille
##
##
## Dernière modifications:
## 27/01/2011: - Ajout de la possibilité de choisir entre supprimer/déplacer fichiers temp
##
# **********************************************************************************************
## Modifications à apporter:
## - Faire une gestion en fonction du nombre d'argument
## - Découper le programme principal en différentes fonctions
## -
# **********************************************************************************************
##
##
##
################################################################################################
# **********************************************************************************************
#
# Variables globales
#
# ----------------------------------------------------------- 
# Variable qui permet d'indiquer si il faut supprimer les fichiers temporaires
# 0 = suppression
rm_file="0"
# Variable qui permet d'indiquer si il faut déplacer les fichiers temporaires dans un sous dossier au nom du fichier à compiler
# 0 = déplacer
mv_file="1"
# Fin des variables globales
# -----------------------------------------------------------
# **********************************************************************************************
# **********************************************************************************************
#
# Fichiers globaux
#
# -----------------------------------------------------------
#
log="`pwd`/compile.log"
# Fin des fichierss globaux
# -----------------------------------------------------------
# **********************************************************************************************
# **********************************************************************************************
#
# Fonctions globales
#
# -----------------------------------------------------------
# Divers echos ...
echoi() { echo " (ii) $*" >> "${log}" ; }
echok() { echo " (ok) $*" >> "${log}" ; }
echow() { echo " (!!) $*" >> "${log}" ; }
echnk() { echo " (EE) $*" >> "${log}" ; }
# Fin des fonctions globales
# -----------------------------------------------------------
# **********************************************************************************************
# **********************************************************************************************
#
# Programme principale
#
# -----------------------------------------------------------
# Suppression du fichier de log si présent:
[ -f "${log}" ] && rm -f "${log}"
case "$1" in # gestion du premier argument
*.tex ) # Si le premier argument est bien un fichier .tex
# On vérifie que le fichier existe bien:
[ ! -f "$1" ] && echo "Erreur, le fichier passé en paramètre n'existe pas. Vérifier son orthographe et son emplacement, merci." && exit 1
# On récupère le nom du fichier:
file=`echo "$1" | sed -e "s/.tex//g"`
# On compile le document en pdf en rediregeant la sortie standart et les erreurs vers le fichier de log
pdflatex "$1" > "${log}" 2>> "${log}"
if [ $? -eq "0" ] # Si la compilation s'est bien déroulée
then
echo "Compilation terminée sans erreur"
else
echo "Il y a eu un problème lors de la compilation, veuillez prendre note du fichier de log: ${log}"
echo "Il y a également les fichiers crées pendant la compilation qui pourront vous aider."
exit 2
fi
if [ ${rm_file} -eq "0" ] # Si il faut supprimer les fichiers temp
then
# Suppression des fichiers temporaires crées pour la compilation:
rm -rf "${file}".aux "${file}".log >> "${log}" 2>> "${log}"
elif [ ${mv_file} -eq "0" ] # Si il faut déplacer les fichiers temp
then
# Nouveau dossier au nom du fichier à compiler
mkdir "${file}"
# Déplacer les fichiers temporaires
mv "${file}".aux "${file}".log "${file}"/
fi
# Affichage du pdf:
evince "${file}".pdf &
echo "good"
exit 0
;;
h|help ) # Si une l'aide est demandée
echo "Aide en cours de rédac =)"
exit 0
;;
* ) # Sinon
echo "Erreur. Utilisation:"
echo "compile_latex fichier.tex"
exit 1
;;
esac
exit 0
# Fin de la boucle principale
# -----------------------------------------------------------
# **********************************************************************************************

145
dl_plowshare.sh Executable file
View File

@ -0,0 +1,145 @@
#!/bin/bash
################################################################################################
##
## Nom: dl_plowshare.sh
##
## Version: 0.1
##
## Licence: Creative Commons
##
## Comportement: Analyse un répertoire pour savoir si il contient un fichier .down qui
## contiendra des liens ddl (megaupload, DL_FILE). Créée un dossier du même nom que le fichier et
## y télécharge les liens qu'il contient avec plowshare. Change ensuite l'extension du fichier
## en .old pour qu'il ne soit pas retéléchargé.
##
## /!\ Changer la variable DL_DIR /!\
##
## Appliquer une tache cron du style:
## */2 * * * * /chemin/script/dl_plowshare.sh
##
##
##
################################################################################################
##
## Date de création: 03-10-2011
##
## Auteur: Gardouille
##
##
## Dernière modifications:
## 03-10-2011 - 0.1:
## -
# **********************************************************************************************
## //2011 - :
## -
## -
# **********************************************************************************************
##
## À modifier:
## - Possibilité de récupérer le répertoire à analyser en argument
##
##
################################################################################################
# **********************************************************************************************
#
# Variables globales
#
# -----------------------------------------------------------
# Fichier temporaire pour savoir si le script est déjà en cours
TMP_FILE="/tmp/dl_plowshare"
# Répertoire à analyser pour trouver un fichier contenant une liste de lien
DL_DIR="/media/data/download/ddl"
# Nom du fichier (sans l'extension) contenant les liens à télécharger
#BASE_DL_FILE=""
# Extension de fichier à analyser
EXTENSION="down"
# Fin des variables globales
# -----------------------------------------------------------
# **********************************************************************************************
# **********************************************************************************************
#
# Fichiers globaux
#
# -----------------------------------------------------------
#
# Fin des fichiers globaux
# -----------------------------------------------------------
# **********************************************************************************************
# **********************************************************************************************
#
# Fonctions globales
#
# -----------------------------------------------------------
# Divers echos DL_FILE
echoi() { echo " (ii) $*" >> "${log}" ; }
echok() { echo " (ok) $*" >> "${log}" ; }
echow() { echo " (!!) $*" >> "${log}" ; }
echnk() { echo " (EE) $*" >> "${log}" ; }
# Fin des fonctions globales
# -----------------------------------------------------------
# **********************************************************************************************
# **********************************************************************************************
#
# Programme principale
#
# -----------------------------------------------------------
## Vérifier que le script n'est pas déjà en cours
if [ ! -f "${TMP_FILE}" ]; then
## Créer un fichier temporaire pour indiquer que le script est en cours d'exécution
touch "${TMP_FILE}"
## Se placer dans le dossier à analyser
pushd "${DL_DIR}" > /dev/null
## Analyser le dossier pour récupérer UN fichier .down (nom de base + extension)
DL_FILE=`\ls | \grep ."${EXTENSION}"|head -n 1`
## Récupérer le nom du fichier (sans extension)
BASE_DL_FILE=${DL_FILE%.*}
## Créer un dossier du même nom et se placer dedans
mkdir "${BASE_DL_FILE}"
pushd "${DL_DIR}"/"${BASE_DL_FILE}" > /dev/null
## Déplacer le fichier .down dans le dossier
mv "${DL_DIR}"/"${DL_FILE}" .
## Lancer le téléchargement en passant en argument le fichier .down
plowdown -m "${DL_FILE}"
## Ressortir du dossier de téléchargement
popd > /dev/null
## Ressortir de l'emplacement à analyser
popd > /dev/null
## Supprimer le fichier temporaire
rm "${TMP_FILE}"
else
## Script déjà en cours
echo "Script de téléchargement déjà en cours."
fi
exit 0
# Fin de la boucle principale
# -----------------------------------------------------------
# **********************************************************************************************

176
doku2moin.sh Executable file
View File

@ -0,0 +1,176 @@
#!/bin/sh
################################################################################################
##
## Nom: doku2moin.sh
##
## Version: 0.1
##
## Licence: Creative Commons
##
## Comportement: Transformer une page de Dokuwiki est en page compatible avec le wiki Moinmoin.
##
##
##
################################################################################################
##
## Date de création: 15-12-2011
##
## Auteur: Gardouille
##
##
## Dernière modifications:
## 15-12-2011 - 0.1: Création du script
## -
# **********************************************************************************************
## //2011 - :
## -
## -
# **********************************************************************************************
## À Modifier:
## - Ajouter l'entête pour la syntaxe Moinmoin automatiquement dans le fichier
## - Ajouter une transformation pour:
## - http://packages.debian.org/search?keywords=NOM_PAQUET -> [[DebianPkg:NOM_PAQUET|Détail du paquet]]
## - http://bugs.debian.org/cgi-bin/pkgreport.cgi?pkg=NOM_PAQUET -> [[DebianBug:NOM_PAQUET|Rapport de bug NOM_PAQUET]]
## - Modifier la transformation de // en '' pour ne pas prendre http:// (par exemple)
##
##
################################################################################################
# **********************************************************************************************
#
# Variables globales
#
# -----------------------------------------------------------
# 
## Choix du mode d'exécution du script:
## Niveau 0 (mode_debug=0)
# Exécution automatique avec normalement aucune interaction avec l'utilisateur.
## Niveau 1 (mode_debug=1)
# ...
## Niveau 2 (mode_debug=2)
# L'installation n'est pas en automatique (aptitude, ...)
# La sortie des différentes commandes est envoyée sur la sortie standard
mode_debug=2
case "$mode_debug" in
0) ## Niveau minimum
# Les questions d'aptitude seront automatiquement validées
options="-y"
# La sortie standard sera redirigée dans un fichier de log
sortie="> /dev/null 2> \"${fichier_erreur}\""
;;
1) ## Niveau moyen
# Les questions d'aptitude seront automatiquement validées
options="-y"
# La sortie standard sera quand même affichée
sortie="2> \"${fichier_erreur}\""
;;
2) ## Niveau maximum
# Aucune options pour aptitude
options=""
# Le résultat des commandes reste sur la sortie standard
sortie=""
;;
esac
## Fichier contenant les dernières erreurs
fichier_erreur="/tmp/erreur_doku2moin.sh.tmp"
touch "${fichier_erreur}"
## Fichier à modifier
file_in=$1
## Fichier modifié
file_out="$1.moin"
## Fichier contenant toutes les expressions à appliquer
expression="sed_expression"
## Liste des expressions sed à appliquer à la commande
titre1="s/^====== /= /\ns/ ======$/ =/\n"
titre2="s/^===== /== /\ns/ =====$/ ==/\n"
titre3="s/^==== /=== /\ns/ ====$/ ===/\n"
titre4="s/^=== /==== /\ns/ ===$/ ====/\n"
titre5="s/^== /===== /\ns/ ==$/ =====/\n"
titre6="s/^= /====== /\ns/ =$/ ======/\n"
code="s/<code>/{{{/\ns/<\/code>/}}}/\n"
## cmd bash:
## dokuwiki: <code bash>
## moinmoin: {{{#!highlight bash
cmd_bash="s/<code \(bash\)>/{{{#!highlight \\\1/\n"
file="s/<file>/{{{/\ns/<\/file>/}}}/\n"
file_type="s/<file \(.*\) .*/{{{#!highlight \\\1/\n"
gras="s/\*\*/\'\'\'/g\n"
italique="s/\/\//\'\'/g\n"
#lien_externe similaire
#liste_puce similaire (-e 's/\(^ \)\*/\1\*/')
liste_num="s/\(^ *\)-/\\\11\./\n"
## Image:
# dokuwiki: {{:teeworlds_01.png|}}
# moinmoin: {{attachment:teeworlds_01.png}}
image="s/{{:\(.*\)|}}/{{attachement:\\\1}}/\n"
# Fin des variables globales
# -----------------------------------------------------------