diff --git a/SoustitreDownloader.php b/SoustitreDownloader.php new file mode 100755 index 0000000..cc25967 --- /dev/null +++ b/SoustitreDownloader.php @@ -0,0 +1,358 @@ +pathSearch = (isset($argv[1]) ? $argv[1] : ""); + $this->pathMove = (isset($argv[2]) ? $argv[2] : ""); + if (isset($argv[3])) { + for($i=0;$icreateFolder=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("#]*>".$this->search->serie."[^<]*".$this->search->saison."x".$this->search->episode."[^<]*#", $episodes, $result); + + if (count($result)>0) { + return $this->findSubtitle($result[1]); + } + else { + preg_match("#.*".$this->search->saison."x".$this->search->episode.".*#", $episodes, $result); + if (count($result)>0) { + return $this->findSubtitle($result[1]); + } + } + return false; + } + + public function findSubtitle($link) { + $soustitres = $this->getDataFromLink($link); + $blocs = explode("
", $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]."&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]."&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]."&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; +} \ No newline at end of file diff --git a/backup_config.sh b/backup_config.sh new file mode 100755 index 0000000..d64825e --- /dev/null +++ b/backup_config.sh @@ -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 +# ----------------------------------------------------------- +# ********************************************************************************************** + + diff --git a/backup_pirate_usb.sh b/backup_pirate_usb.sh new file mode 100755 index 0000000..78cbc39 --- /dev/null +++ b/backup_pirate_usb.sh @@ -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 +# ----------------------------------------------------------- +# ********************************************************************************************** + + diff --git a/bashblock b/bashblock new file mode 100755 index 0000000..f1998a3 --- /dev/null +++ b/bashblock @@ -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 diff --git a/bkp_cluster_file b/bkp_cluster_file new file mode 100755 index 0000000..fbd7a6f --- /dev/null +++ b/bkp_cluster_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 diff --git a/commandes_utiles b/commandes_utiles new file mode 100755 index 0000000..c1ca478 --- /dev/null +++ b/commandes_utiles @@ -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"' +"%a %d %b %H:%M" + + + +##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 diff --git a/compile_latex b/compile_latex new file mode 100755 index 0000000..2c6a136 --- /dev/null +++ b/compile_latex @@ -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 +# ----------------------------------------------------------- +# ********************************************************************************************** + diff --git a/dl_plowshare.sh b/dl_plowshare.sh new file mode 100755 index 0000000..28f65c0 --- /dev/null +++ b/dl_plowshare.sh @@ -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 +# ----------------------------------------------------------- +# ********************************************************************************************** + + diff --git a/doku2moin.sh b/doku2moin.sh new file mode 100755 index 0000000..abafa09 --- /dev/null +++ b/doku2moin.sh @@ -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//{{{/\ns/<\/code>/}}}/\n" +## cmd bash: +## dokuwiki: +## moinmoin: {{{#!highlight bash +cmd_bash="s//{{{#!highlight \\\1/\n" +file="s//{{{/\ns/<\/file>/}}}/\n" +file_type="s/ $expression + +sed --file="${expression}" "${file_in}" > "${file_out}" + +echo "-------------------------------" +echo "-------------------------------" +echo "Rajouter au début du fichier (avant le titre):" +echo "#language fr +||~-Traduction(s): [[$file_in|English]] - Français|| + ---- + +<>" + +exit 0 +# Fin de la boucle principale +# ----------------------------------------------------------- +# ********************************************************************************************** + + diff --git a/download_lirescan.sh b/download_lirescan.sh new file mode 100755 index 0000000..c71b419 --- /dev/null +++ b/download_lirescan.sh @@ -0,0 +1,51 @@ +#!/bin/sh + +manga_title="area-d" +manga_path="./${manga_title}" +start_chapter=099 +max_chapter=100 +#start_chapter=1 +#max_chapter=117 +image_format="jpg" + + +for chapter in $(seq "${start_chapter}" "${max_chapter}"); do + # Create the chapter directory + mkdir -p "${manga_path}/${chapter}" + pushd "${manga_path}/${chapter}" + + # + image=001 + + # Allow some download errors + error=0 + max_error=5 + + + while [ $error -lt $max_error ]; do + # Build the url to download image and download it + url="http://www.lirescan.com/images/lecture-en-ligne/${manga_title}/${chapter}/${image}.${image_format}" + printf "Download ${image} from chapter ${chapter}\n" + wget ${url} --quiet + + if [ $? -eq 0 ]; then { + #image=$((image++)) + #image=$(printf %02d $((image+1)) ) + #image=$((image+1)) + error=0 + } + else { + error=$((error+1)) + } + fi + # Next image (need to be 0x) + image=$(printf "%02d" $((image+1)) ) + # If image need to be 00x …) + #image=$(printf "%03d" $((image+1)) ) + + done + + popd + + +done diff --git a/download_online_manga.sh b/download_online_manga.sh new file mode 100755 index 0000000..64fd610 --- /dev/null +++ b/download_online_manga.sh @@ -0,0 +1,70 @@ +#!/bin/bash + +TITLE="${1}" +URL="${2}" +NB_PAGE="${3}" +EXTENSION="${4}" +NB_DOWNLOAD=$(ls -Al ${TITLE} | wc -l) + +## Loop +#TITLE="loop" +#URL="http://www.wallagain.cc/content/comics/one_shot_et_bonus_51778e8bc8178/17_0_loop_536fa75c5b3bb" +#NB_PAGE=56 +#EXTENSION="jpg" + +## Demon King +#TITLE="demon_king" +#URL="http://www.wallagain.cc/content/comics/one_shot_et_bonus_51778e8bc8178/8_0_one_shot_demon_king_51aa1473753cc/" +#NB_PAGE=24 +#EXTENSION="jpg" + +mkdir -p "${TITLE}" +pushd "${TITLE}" + +i=1 + +# Ajout du "0" pour le 9 premières pages ... +while [ "${i}" -le "9" ]; do + + wget -q "${URL}"/0$i."${EXTENSION}" + + if [ $? -eq 0 ]; then # Dowload OK + (( i++ )) + else + echo "0${i}.${EXTENSION} not download" + # Gestion des doubles pages + j=${i} + (( j++ )) + # If it's 0i-0j.jpg page + wget "${URL}"/0$i-0$j."${EXTENSION}" + # If it's 09-10.jpg page + wget "${URL}"/0$i-$j."${EXTENSION}" + (( i++ )) + fi + +done + +while [ "${i}" -le "${NB_PAGE}" ]; do + + wget -q "${URL}"/$i."${EXTENSION}" + + if [ $? -eq 0 ]; then # Dowload OK + (( i++ )) + else + echo "${i}.${EXTENSION} not download" + # Gestion des doubles pages + j=${i} + (( j++ )) + wget "${URL}"/$i-$j."${EXTENSION}" + (( i++ )) + fi + +done + +# Bilan +echo "${NB_DOWNLOAD} pages téléchargées pour ${NB_PAGE} demandées" + + +popd + + diff --git a/ecran b/ecran index e24dba3..6b025fe 100755 --- a/ecran +++ b/ecran @@ -8,7 +8,7 @@ case "${1}" in ds | dockstation | work ) - xrandr --output HDMI-1 --mode 1920x1200 --above LVDS-1 --output LVDS-1 --mode 1366x768 + xrandr --output HDMI-1 --mode 1920x1200 --right-of LVDS-1 --output LVDS-1 --mode 1366x768 printf 'Xrandr for DisplayPort with dock station';; vga | lug ) xrandr --output VGA-1 --mode 1280x1024 --right-of LVDS-1 --output LVDS-1 --mode 1366x768 diff --git a/emy_sms.py b/emy_sms.py new file mode 100755 index 0000000..b953350 --- /dev/null +++ b/emy_sms.py @@ -0,0 +1,160 @@ +#/usr/bin/python +# -*- coding: utf-8 -*- + +# Script permettant d'envoyer des SMS grâce à Google Agenda. +# Créez un compte google, un nouvel agenda, et configurez-le pour que la notification se fasse par SMS 5 minutes avant l'événement. +# L'idée vient de http://macsim.labolinux.net/index.php/post/2008/02/15/137-smsalert-envoyer-des-sms-gratuitement-depuis-ses-serveurs + +# Copyright (C) 2008 Jean-Philippe Brucker — Tous droits réservés. +# +# Ce programme est un logiciel libre. Vous pouvez le redistribuer ou le +# modifier suivant les termes de la "GNU General Public License" version 3, +# telle que publiée par la Free Software Foundation. +# +# Ce programme est distribué dans l’espoir qu’il vous sera utile, mais SANS +# AUCUNE GARANTIE : sans même la garantie implicite de COMMERCIALISABILITÉ +# ni d’ADÉQUATION À UN OBJECTIF PARTICULIER. Consultez la Licence Générale +# Publique GNU pour plus de détails. +# +# Ce programme doit être distribué avec une copie de la +# License Générale Publique GNU (fichier license.html). +# Si ce n’est pas le cas, consultez: . + +import urllib, urllib2 +import time +import re +import sys, getopt + +# Modifiez ces champs pour vous logger automatiquement. +USER='emilie.nerre@gmail.com' +PASSWD='catpower' +# Ajoutez /private/full à la fin d'une adresse personalisée. +ADRESSE="http://www.google.com/calendar/feeds/default/private/full" + +AIDE="""Aide : +Usage : %s [-h] [-e email] [-p pass] [titre [message]] + -h ou --help : Afficher l'aide. + -e ou --email : spécifier un compte. + -p ou --password : spécifier un mot de passe +Et c'est tout. +""" % sys.argv[0] + +def parserLdc(): + global title,where, USER, PASSWD + opts, args=None, None + try: + opts, args=getopt.getopt(sys.argv[1:], "he:p:",['help', 'email=', 'password=']) + except getopt.GetoptError, e: + raise 'Argument «%s» inconnu.' % e.opt + for option, value in opts: + if option in ('-h', '--help'): + print AIDE + sys.exit(0) + elif option in ('-e', '--email'): + USER = value + elif option in ('-p', '--password'): + PASSWD = value + if len(args)==2: + title = args[0].replace('\'', ' ') + where = args[1].replace('\'', ' ') + elif len(args)==1: + title = args[0].replace('\'', ' ') + +class googleCalendar: + """ Cette classe permet de créer un nouvel événement dans un agenda google.""" + def __init__(self, user, passwd, adress): + self.user = user + self.passwd = passwd + self.adress = adress + self.auth = "" + + def connect(self): + url={} + url['accountType']='GOOGLE' + url['Email']=self.user + url['Passwd']=self.passwd + url['service']='cl' + url['source']='exampleCo-exampleApp-1' + page = urllib.urlopen("https://www.google.com/accounts/ClientLogin", urllib.urlencode(url)) + for line in page.readlines(): + if line.find("Auth=")>-1: + self.auth = line[5:-1] + return 0 + return 1 + def send(self,settings): + """ send prend un tuple en argument : + Settings={} + Settings['title'] => Affiché dans un SMS + Settings['content'] + Settings['where'] => Affiché dans un SMS + Settings['start'] => Le SMS est envoyé 5min avant + Settings['end'] + """ + if self.connect(): + print "Connexion impossible !" + return + Data = """ + + %s + %s + + %s + %s + + + + + + """ % (settings['title'], settings['content'], self.user, self.user, settings['where'], settings['start'], settings['end']) + Headers={} + Headers['Host']='www.google.com' + Headers['MIME-Version']='1.0' + Headers['Accept']='text/xml' + Headers['Authorization']='GoogleLogin auth='+self.auth + Headers['Content-length']=str(len(Data)) + Headers['Content-type']='application/atom+xml' + Headers['Cache-Control']='no-cache' + Headers['Connection']='close \r\n' + try: + req = urllib2.Request(self.adress, Data, Headers) + handler = urllib2.HTTPHandler()#debuglevel=2) + opener = urllib2.OpenerDirector() + opener.add_handler(handler) + page = opener.open(req) + + # Pas joli-joli, tout ça. À améliorer + lien = re.compile(r'HREF=["\'](.+)["\']').findall(page.read()) + if len(lien)>0: + req=urllib2.Request(lien[0],Data,Headers) + else: + print "Impossible de récupérer l'adresse de redirection." + return + opener.open(req) + print "Événement envoyé." + except IOError, e: + print e + return + +def RFC3339(date): + d=[] + for i in date: + d.append(str(i)) + for i in xrange(1,6): + if len(d[i])<2: d[i]="0"+d[i] + return d[0]+'-'+d[1]+'-'+d[2]+'T'+d[3]+':'+d[4]+':'+d[5]+'.000Z' + +def main(): + global title,where,USER,PASSWD + title="" + where="" + parserLdc() + while not USER : USER=raw_input("Entrez votre nom d'utilisateur : ") + while not PASSWD: PASSWD=raw_input("Entrez votre mot de passe : ") + while not title : title = raw_input("Entrez un titre : ") + if not where : where = raw_input("Entrez un message ou tapez [Entrée] pour laisser vide: ") + + event = {'title':title, 'content': "SMS", 'where':where, 'start':RFC3339(time.gmtime(time.time()+60*5+30)), 'end':RFC3339(time.gmtime(time.time()+60*5+45))} + + cal = googleCalendar(USER, PASSWD, ADRESSE) + cal.send(event) +if __name__=="__main__": main() diff --git a/fpm b/fpm new file mode 100755 index 0000000..7cb00b9 --- /dev/null +++ b/fpm @@ -0,0 +1,23 @@ +#!/usr/bin/ruby2.2 +# +# This file was generated by RubyGems. +# +# The application 'fpm' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +require 'rubygems' + +version = ">= 0" + +if ARGV.first + str = ARGV.first + str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding + if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then + version = $1 + ARGV.shift + end +end + +gem 'fpm', version +load Gem.bin_path('fpm', 'fpm', version) diff --git a/idok-x86_64 b/idok-x86_64 new file mode 100755 index 0000000..2bc7cc7 Binary files /dev/null and b/idok-x86_64 differ diff --git a/jolla_connect b/jolla_connect index 6959392..c3dfd80 100755 --- a/jolla_connect +++ b/jolla_connect @@ -1,6 +1,6 @@ #!/bin/sh -localIp='192.168.1.10/24' -localBroadcast='192.168.1.255' +localIp='192.168.2.10/24' +localBroadcast='192.168.2.255' netAdp=$1 sudo ip addr add $localIp broadcast $localBroadcast dev $netAdp diff --git a/jolla_mount b/jolla_mount new file mode 100755 index 0000000..38f3a8c --- /dev/null +++ b/jolla_mount @@ -0,0 +1,13 @@ +#!/bin/bash +localIp='192.168.1.10/24' +localBroadcast='192.168.1.255' +netAdp=$1 +mountPath='/home/$USER/jolla' +user='nemo' +jollaIp='192.168.1.11' + +sudo ip addr add $localIp broadcast $localBroadcast dev $netAdp +# First umount if all ready mounted +#fusermount -u $mountPath +#sleep 2 +#sshfs $user@$jollaIp:/home/$user -p 22 $mountPath diff --git a/jolla_usb_tethering.sh b/jolla_usb_tethering.sh index d6b2bc2..5f34522 100755 --- a/jolla_usb_tethering.sh +++ b/jolla_usb_tethering.sh @@ -1,8 +1,8 @@ #!/bin/sh -localIp='192.168.1.10/24' -localBroadcast='192.168.1.255' +localIp='192.168.2.10/24' +localBroadcast='192.168.2.255' netAdp=$1 -jollaIp='192.168.1.15' +jollaIp='192.168.2.15' sudo ip addr add $localIp broadcast $localBroadcast dev $netAdp sudo ip route add default via $jollaIp dev $netAdp onlink diff --git a/log_zenity_generator.log b/log_zenity_generator.log new file mode 100755 index 0000000..fd95c11 --- /dev/null +++ b/log_zenity_generator.log @@ -0,0 +1,26 @@ +zenity --list --radiolist --title="Type d'url" --text="Vous pouvez maintenant taper le texte que vous souhaitez voir apparaître dans votre fenêtre. +Il est possible de faire des effets sur les polices, pour plus d'infos, regardez le menu 'exemples'. + +Evitez les !!, cela provoque des erreurs. + +Exemples de balises pour mettre en forme le texte interne de vos fenêtres (exceptées celles de saisie de texte) : + - Mise en gras : texte + - Mise en italique : Texte + - Mise en couleur : texte (avec les anti-slashs) + +##### MERCI DE SUPPRIMER CES INFOS AVANT DE CLIQUER SUR FERMER ##### +Quel est le type d'url que vous désirez?" \ +youtube (http://www.youtube.com/watch? ...) \ +url directe d'un fichier flv \ +autres (pas encore géré) + + +zenity --list --radiolist --title="Type d'url?" --text="Quel type d'url allez vous utiliser pour télécharger le fichier?" --column="Type d'url" \ +youtube (http://www.youtube.com/ ...) \ +url directe d'un fichier flv \ +autre (pas encore géré) + + +zenity --calendar --title="hello world" --text="42" + + diff --git a/ms-sys b/ms-sys new file mode 100755 index 0000000..97bef27 Binary files /dev/null and b/ms-sys differ diff --git a/pubkey.sh b/pubkey.sh new file mode 100755 index 0000000..2c2e659 --- /dev/null +++ b/pubkey.sh @@ -0,0 +1,92 @@ +#!/usr/bin/env bash +################################################################################################ +## +## Nom: pubkey.sh +## +## Licence: Creative Commons +## +## Comportement: Permet d'obtenir la clé publique d'un dépôt en indiquant la "clef" donnée par l'erreur "NO PUBKEY" +## +## +## +################################################################################################ +## +## Date de création: 29-08-2011 +## +## Auteur: ggoodluck47 +## Lien: http://www.isalo.org/wiki.debian-fr/index.php?title=Erreur_lors_d%27un_update:_NO_PUBKEY#Un_script_pour_se_simplifier_la_vie +## +## +## Dernière modifications: +## 29-08-2011: - Création +# ********************************************************************************************** +## //2011: - +## - +# ********************************************************************************************** +## +## +## +################################################################################################ + + + +# ********************************************************************************************** +# +# Variables globales +# +# ----------------------------------------------------------- +#  + +# Fin des variables globales +# ----------------------------------------------------------- +# ********************************************************************************************** + + +# ********************************************************************************************** +# +# Fichiers globaux +# +# ----------------------------------------------------------- +# + +# Fin des fichiers 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 +# +# ----------------------------------------------------------- + +# Ajouter une clé GPG au porte-clef +# Utiliser gpgkeys pour gérer la suppression +echo "coller la clef (8 caractères)" +read clef +gpg --keyserver pgpkeys.mit.edu --recv-key $clef +gpg -a --export $clef | sudo apt-key add - + +exit 0 +# Fin de la boucle principale +# ----------------------------------------------------------- +# ********************************************************************************************** + + diff --git a/remount b/remount new file mode 100755 index 0000000..4776347 --- /dev/null +++ b/remount @@ -0,0 +1,18 @@ +#!/bin/sh + +# Remount with default value from /etc/fstab all mountpath + +if [ $(id -u) -eq 0 ]; then + # Nok: + #mount -a -o remount + # OK: + #mount ${mountpath} -o remount + # OK: + #if [ $(mountpoint -q "${mountpath}") ]; then mount "${mountpath}" -o remount; fi + # Get the mountpath list + grep -v "^#" /etc/fstab | awk '{print $2}' +else + sudo $0 +fi + +exit 0 diff --git a/rubygems-cabin-test b/rubygems-cabin-test new file mode 100755 index 0000000..78ff5a3 --- /dev/null +++ b/rubygems-cabin-test @@ -0,0 +1,23 @@ +#!/usr/bin/ruby2.2 +# +# This file was generated by RubyGems. +# +# The application 'cabin' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +require 'rubygems' + +version = ">= 0" + +if ARGV.first + str = ARGV.first + str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding + if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then + version = $1 + ARGV.shift + end +end + +gem 'cabin', version +load Gem.bin_path('cabin', 'rubygems-cabin-test', version) diff --git a/scdl b/scdl new file mode 100755 index 0000000..49db4c0 --- /dev/null +++ b/scdl @@ -0,0 +1,10 @@ +#!/usr/bin/python3 +# EASY-INSTALL-ENTRY-SCRIPT: 'scdl==1.5.0.post3','console_scripts','scdl' +__requires__ = 'scdl==1.5.0.post3' +import sys +from pkg_resources import load_entry_point + +if __name__ == '__main__': + sys.exit( + load_entry_point('scdl==1.5.0.post3', 'console_scripts', 'scdl')() + ) diff --git a/script_shell b/script_shell new file mode 100755 index 0000000..8ebc373 --- /dev/null +++ b/script_shell @@ -0,0 +1,86 @@ +#!/bin/sh +################################################################################################ +## +## Nom: +## +## Version: 0.1 +## +## Licence: Creative Commons +## +## Comportement: +## +## +## +################################################################################################ +## +## Date de création: +## +## Auteur: Gardouille +## +## +## Dernière modifications: +## 27/01/2011: - +# ********************************************************************************************** +## 02/02/2011: - +## - +# ********************************************************************************************** +## +## +## +################################################################################################ + + + +# ********************************************************************************************** +# +# Variables globales +# +# ----------------------------------------------------------- +#  + +# Fin des variables globales +# ----------------------------------------------------------- +# ********************************************************************************************** + + +# ********************************************************************************************** +# +# Fichiers globaux +# +# ----------------------------------------------------------- +# + +# Fin des fichiers 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 +# +# ----------------------------------------------------------- + + +exit 0 +# Fin de la boucle principale +# ----------------------------------------------------------- +# ********************************************************************************************** + diff --git a/sed_expression.exemple b/sed_expression.exemple new file mode 100755 index 0000000..a605c65 --- /dev/null +++ b/sed_expression.exemple @@ -0,0 +1,25 @@ +s/^====== /= / titre1 +s/ ======$/ =/ +s/^===== /== / titre2 +s/ =====$/ ==/ +s/^==== /=== / titre3 +s/ ====$/ ===/ +s/^=== /==== / titre4 +s/ ===$/ ====/ +s/^== /===== / titre5 +s/ ==$/ =====/ +s/^= /====== / titre6 +s/ =$/ ======/ +s//{{{/ code +s/<\/code>/}}}/ +s//{{{#!highlight \1/ cmd/code bash +s//{{{/ fichier +s/<\/file>/}}}/ +s//dev/xmessagenull; then xmessage "$1" -timeout 5 + elif command -v notify-send 2>/dev/null; then notify-send "$1" + elif command -v kdialog 2>/dev/null; then { kdialog --title "$1" --passivepopup "This popup will disappear in 5 seconds" 5 & } + elif command -v zenity 2>/dev/null; then { echo "message:$1" | zenity --notification --listen & } + else echo "$1" > "$(basename -- $0)_notif.txt" + fi + fi +} + +################################################ +# dependency check # +################################################ +depend_check() { + #printf '%b' "depend_check: $arg \n" + for arg; do + command -v "$arg" 2>/dev/null || { notif >&2 "Error: Could not find \"$arg\" application."; exit 1; } + done +} + +################################################ +# check if input files > min # +################################################ +nb_files_check() { + nb_files="$1" + min_nb_files="$2" + if [ $1 -lt $2 ]; then + notif "$1 file selected, \"$(basename -- $0)\" needs at least $2 input file(s)." + exit 1 + fi +} + +################################################ +# script # +################################################ +nb_files_check $# 1 + +depend_check idok-x86_64 + +command idok-x86_64 $* + +exit 0 diff --git a/sync_config_file.sh b/sync_config_file.sh new file mode 100755 index 0000000..24975ea --- /dev/null +++ b/sync_config_file.sh @@ -0,0 +1,313 @@ +#!/bin/sh +################################################################################################ +## +## Nom: sync_config_file.sh +## +## Licence: Creative Commons +## +## Comportement: Synchronise différents fichiers/dossiers de configuration dans un répertoire qui fait office de sauvegarde +## +## +## +################################################################################################ +## +## Date de création: 20/10/2010 +## +## Auteur: Gardouille +## +## +## Dernière modifications: +## 20/10/2010: - Création +# ********************************************************************************************** + +## 2011/09/17 - +## - Ajout du fichier des applications d'ouverture par défauts pour les fichiers +## + +## 16/12/2010: - Ajout de la configuration de parcellite +## 21/12/2010: - Ajout de la configuration de screen - panel gnome +## 16/02/2011: - Ajout de la configuration de teamviewer +## 27/04/2011: - Ajout de la configuration de moc +## 18/08/2011: - Ajotu de la configuration de samba +## 30/09/2011: - Ajout de la configuration de remmina minecraft +# ********************************************************************************************** +## +## À modifier: +## - Ajouter la configuration de freeplane +## - Faire une nouvelle configuration pour gedit +## - Trouver tout les bons droits sur les fichiers à restaurer +## - Possibilité de sauvegarder la configuration de gedit avec gconftool? NON +## +################################################################################################ + + + +# ********************************************************************************************** +# +# Variables globales +# +# ----------------------------------------------------------- +# Répertoire personnel de l'utilisateur: +USER_DIR="/home/darker" + +# Fin des variables globales +# ----------------------------------------------------------- +# ********************************************************************************************** + + +# ********************************************************************************************** +# +# Fichiers globaux +# +# ----------------------------------------------------------- +# + +# 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 +# +# ----------------------------------------------------------- + +case "$1" in + backup) + + if [ "${USER}" = "root" ]; then + # Synchronisation des fichiers de configuration de zsh + ## Droits: + ## 644: /etc/zsh/* + rsync -a --delete /etc/zsh /media/data/config_debian/etc/ + rsync -a /etc/dir_colors /media/data/config_debian/etc/ + + # Synchronisation du fichier hosts + ## Droits: + ## 644: /etc/hosts + rsync -a /etc/hosts /media/data/config_debian/etc + + # Synchronisation des fichiers de configuration de aptitude + ## Droits: + ## 644: /etc/apt/{preferences,sources.list} + rsync -a --delete /etc/apt/sources.list /media/data/config_debian/etc/apt + rsync -a --delete /etc/apt/preferences /media/data/config_debian/etc/apt + + # Copie du fichier fstab + ## Droits: + ## 644: /etc/fstab + cp /etc/fstab /media/data/config_debian/etc/fstab.backup + + # Synchronisation du répertoire samba + ## Droits: + ## 644: /etc/samba/* (récursif pour tous les fichiers) + rsync -a --delete /etc/samba /media/data/config_debian/etc/ + + # Fichier dictionnaire de vim + ## Droits: + ## 644: /usr/share/vim/vim73/spell/* +# rsync -a --delete /usr/share/vim/vim73/spell /media/data/config_debian/usr/share/vim/vim73 + + # Configuration des interfaces réseaux + ## Droits: + ## 644: /etc/network/interfaces + rsync -a --delete /etc/network/interfaces /media/data/config_debian/etc/network/ + else + #gconftool-2 --dump /apps/panel > /media/data/config_debian/home/my-panel-setup.entries + echo "pas de sauvegarde gconftool pour le moment" + fi + + ## Répertoire personnel + # Synchro du fichier de config de terminator + ## Droits: + ## 644: ~/.config/terminator/config + rsync -a --delete "${USER_DIR}"/.config/terminator/config /media/data/config_debian/home/.config/terminator + + # Modèles de documents + ## 644: ~/.config/user-dirs.dirs ~/Modeles/* + rsync -a --delete "${USER_DIR}"/.config/user-dirs.dirs /media/data/config_debian/home/.config/ + rsync -a --delete "${USER_DIR}"/Modeles /media/data/config_debian/home/ + + # Configuration de pidgin (comptes et historique) + ## Droits: +    ## 700: .purple + ## 600: .purple/*.xml (récursif) + ## 644: .purple/*.html (récursif) (historique en lecture pour tout le monde ... ?) + rsync -a --delete "${USER_DIR}"/.purple /media/data/config_debian/home + + # Configuration de mozilla + ## Droits: + ## 700: .mozilla (récursif pour les dossiers) + # rsync -a "${USER_DIR}"/.mozilla/firefox/xb6j4gn3.default/ /media/data/config_debian/home/.mozilla/firefox/ + rsync -a "${USER_DIR}"/.mozilla/firefox/profiles.ini /media/data/config_debian/home/.mozilla/firefox + + # configuration de icedove sans les mails imap (gmail, hotmail, mailoo) + ## Droits: + ## 700: .icedove (récursif pour les dossiers) + rsync -a --delete --filter "- ImapMail/" "${USER_DIR}"/.icedove /media/data/config_debian/home/ + + # configuration de skype + rsync -a --delete "${USER_DIR}"/.Skype /media/data/config_debian/home + + # Configuration de Libreoffice (templates, dico, ...) + ## Droits: + ## 755: .libreoffice (récursif pour les dossiers) + rsync -a --delete "${USER_DIR}"/.libreoffice /media/data/config_debian/home + + # Configuration de vim + ## 700: .vim (récursif pour les dossiers) + ## 640: pour les fichiers + rsync -a --delete "${USER_DIR}"/.vim* /media/data/config_debian/home + + # configuration de ssh (nom d'utilisateur suivant l'host) + ## 700: .ssh + ## 600: .ssh/* + rsync -a --delete "${USER_DIR}"/.ssh/config /media/data/config_debian/home/.ssh + + # Configuration de Eye Of Gnome (eog), plugin activés, ... + ## -> Pas de fichier de config <- +# rsync -a --delete "${USER_DIR}"/.gconf/apps/eog/plugins/%gconf.xml /media/data/config_debian/home/.gconf/apps/eog/plugins + + # configuration de gedit + ## -> plus de fichier de configuration à propremement parler. +# rsync -a --delete "${USER_DIR}"/.gconf/apps/gedit-2 /media/data/config_debian/home/.gconf/apps + + # configuration de gnome +# rsync -a --delete "${USER_DIR}"/.gconf/apps/panel /media/data/config_debian/home/.gconf/apps +# rsync -a --delete "${USER_DIR}"/.gconf/desktop/gnome /media/data/config_debian/home/.gconf/desktop + + # Script nautilus + ## Recréer les liens: + # Resize Image (1024px) -> ../nautilus-resize-image/ResizeImage.sh + # Resize Image (800px) -> ../nautilus-resize-image/ResizeImage.sh + ## 755: ~/.gnome2/nautilus-scripts/* + rsync -a --delete "${USER_DIR}"/.gnome2/nautilus-* /media/data/config_debian/home/.gnome2/ + + # script + ## 755: ~/bin/* + rsync -a --delete "${USER_DIR}"/bin /media/data/config_debian/home/ + + # configuration de irssi + ## 755: ~/.irssi/* + ## 640: ~/.irssi/config + rsync -a --delete "${USER_DIR}"/.irssi /media/data/config_debian/home/ + + # icônes + ## Droits: + ## 777: .icons/* + rsync -a --delete "${USER_DIR}"/.icons /media/data/config_debian/home/ + + # configuration et bibliothèque de rhythmbox (note des chansons!) + ## Droits: + ## 700: .local/share/rhythmbox + ## 644: .local/share/rhythmbox/* + rsync -a --delete "${USER_DIR}"/.local/share/rhythmbox /media/data/config_debian/home/.local/share/ + ## 700: .gconf/apps/rhythmbox + ## 600: .gconf/apps/rhythmbox/*.xml (récursif) + rsync -a --delete "${USER_DIR}"/.gconf/apps/rhythmbox /media/data/config_debian/home/.gconf/apps/ +# rsync -a --delete /usr/lib/rhythmbox/plugins/vkontakte /media/data/config_debian/usr/lib/rhythmbox/plugins + + # Configuration de filezilla + ## 644 ~/.filezilla/* + rsync -a --delete "${USER_DIR}"/.filezilla /media/data/config_debian/home + + # Configuration de l'applet audio + rsync -a --delete "${USER_DIR}"/.gstreamer-0.10 /media/data/config_debian/home + + # Configuration de TSClient + ## 644: ~/.tsclient/* + rsync -a --delete "${USER_DIR}"/.tsclient /media/data/config_debian/home + + # Configuration de Transmission +    ## 755: .config/transmission/* (récursif pour les dossiers) + ## 600: .config/transmission/* (récursif pour les fichiers) + rsync -a --delete "${USER_DIR}"/.config/transmission /media/data/config_debian/home/.config + + # Configuration de l'écran de veille + ##  + + # Configuration de Parcellite + rsync -a --delete "${USER_DIR}"/.config/parcellite /media/data/config_debian/home/.config + + # Configuration de screen + ## 600: .screen/* + rsync -a --delete "${USER_DIR}"/.screen /media/data/config_debian/home/ + + # Configuration de teamviewer + ## 755: ~/.teamviewer + ## NE PAS RESTAURER TOUT LE RÉPERTOIRE TEAMVIEWER -> Trouver le fichier de config + rsync -a --delete "${USER_DIR}"/.teamviewer /media/data/config_debian/home/ + + # Configuration de moc (music on console) + ## + rsync -a --delete "${USER_DIR}"/.moc /media/data/config_debian/home/ + + # Configuration des programmes par défaut pour ouvrir les fichiers: + ## 644: .local/share/applications/mimeapps.list + rsync -a --delete "${USER_DIR}"/.local/share/applications/mimeapps.list /media/data/config_debian/home/.local/share/applications/ + + # Configuration de remmina + ## 755: .remmina + ## 644: .remmina/* + rsync -a --delete ~/.remmina /media/data/config_debian/home/ + + # Configuration/save de minecraft + ## 755: ~/.minecraft (récursif sur les répertoires) + ## 777 en récursif sur les fichiers? + rsync -a --delete ~/.minecraft /media/data/config_debian/home/ + + ;; + + + restore) + ## Restoration /etc/ + if [ "${USER}" = "root" ]; then + rm -rf /etc/zsh/ + rm -rf /etc/hosts + rsync -a /media/data/config_debian/etc/ /etc + rsync -a /media/data/config_debian/usr/ /usr + + exit 0 + else +# gconftool-2 --load /media/data/config_debian/home/my-panel-setup.entries + echo "pas de gconftool pour le moment" + fi + + ## Répertoire personnel + rsync -a /media/data/config_debian/home/ "${USER_DIR}" + + ## Attribution des droits sur "${USER_DIR}" + cd "${USER_DIR}" + find . -type d -exec chmod 700 {} \; + chmod -R 755 bin/ + chmod -R 700 .ssh/ + chown -R darker:darker "${USER_DIR}" + + ## Attribution des droits sur ~/.freeplane: + chmod 644 "${USER_DIR}"/.freeplane/ + ;; + *) + echo "Utilisation: $0 [backup|restore]" + exit 1 +esac + +exit 0 + diff --git a/synchro_wiki.sh b/synchro_wiki.sh new file mode 100755 index 0000000..6880ffa --- /dev/null +++ b/synchro_wiki.sh @@ -0,0 +1,25 @@ +#!/bin/bash +###################################################### +## Petit script qui se charge de synchroniser mon wiki +## distant dans un répertoire local pour utilisation +## offline. +###################################################### + +# Le serveur où est stocker le wiki +serveur="straga" +user="darker" + +# Test si présent sur le réseau +ping -c 2 "${serveur}" > /dev/null + +if [ $? -eq 0 ]; then + rsync -az "${user}"@"${serveur}":/var/www/dokuwiki /home/"${user}"/depot/ > /dev/null 2> /dev/null + if [ $? -eq 0 ]; then + echo "Synchro du wiki ${serveur} réussie" + else + echo "Synchro échouée" + fi +else + echo "Not @home" +fi + diff --git a/update_repo_git.sh b/update_repo_git.sh new file mode 100755 index 0000000..aa8b9b4 --- /dev/null +++ b/update_repo_git.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +update() { + REPO_URL="${1}" + REPO_PATH="${2}" + + `ping -q -c 3 "${REPO_URL}" > /dev/null 2>&1` + + # If $REPO_URL is available + if [ $? -eq 0 ]; then + echo "${REPO_URL} is available" + pushd "${REPO_PATH}" > /dev/null 2>&1 + git pull > /dev/null 2>&1 + popd > /dev/null 2>&1 + else + echo "${REPO_URL} is not available" + fi +} + +# Update Puppet IPR repo +update "git1.ipr.univ-rennes1.fr" "/home/jegardai/depot/ipr_puppet" +# Update Gardouille www data (dokuwiki, shaarli, respawn, ...) +update "www.google.fr" "/home/jegardai/depot/gardouille_www" + diff --git a/virtualenv b/virtualenv new file mode 100755 index 0000000..2eafdfb --- /dev/null +++ b/virtualenv @@ -0,0 +1,11 @@ +#!/usr/bin/python + +# -*- coding: utf-8 -*- +import re +import sys + +from virtualenv import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/wget_list b/wget_list new file mode 100755 index 0000000..bec72c0 --- /dev/null +++ b/wget_list @@ -0,0 +1,166 @@ +#!/bin/sh +################################################################################################ +## +## Nom: wget_list +## +## Licence: Creative Commons +## +## Comportement: +## Permet de récupérer tous les liens listés dans un fichier en lancant plusieurs wget +## en parallèle. +## Le fichier qui contient les liens est le premier paramètre passé au script. +## Le dossier où enregistré tous les liens correspond au deuxième paramètre passé au script, +## ou à un dossier prédéfini. +## +## +## +################################################################################################ +## +## Date de création: 03/06/2010 +## +## Auteur: Gardouille +## +## +## Dernière modifications: +## O3/O6/2010: - Création +# ********************************************************************************************** +## 02/01/2010: - +## - +# ********************************************************************************************** +## +## +## +################################################################################################ + + + +# ********************************************************************************************** +# +# Variables globales +# +# ----------------------------------------------------------- +# Fichier qui contient la liste des liens à télécharger: "${1}" +list_url=${1} +# Répertoire où vont être stockés les fichiers téléchargés +save_dir=${2} + +# Fin des variables globales +# ----------------------------------------------------------- +# ********************************************************************************************** + + +# ********************************************************************************************** +# +# Fonctions globales +# +# ----------------------------------------------------------- +# Divers echos ... +echoi() { echo " (ii) $*" >> "${log}" ; } +echok() { echo " (ok) $*" >> "${log}" ; } +echow() { echo " (!!) $*" >> "${log}" ; } +echnk() { echo " (EE) $*" >> "${log}" ; } + +# Fonction d'aide +help() +{ + cat << EOF + Description: + Ce script permet de télécharger tous les liens stockés dans un fichier texte. + + Utilisation: + wget_list FICHIER_URL DOSSIER_OU_SAUVEGARDER + + Arguments: + FICHIER_URL: Chemin du fichier qui contient la liste des liens à télécharger + DOSSIER_OU_SAUVEGARDER: Dossier où vont être sauvegardés les fichiers téléchargés + + Options: + -h, --help, help Affiche cette aide. +EOF +} +# Fin des fonctions globales +# ----------------------------------------------------------- +# ********************************************************************************************** + + +# ********************************************************************************************** +# +# Programme principale +# +# ----------------------------------------------------------- + +## Gestion des arguments: +# Si l'utilisateur veut afficher l'aide +if [ "${1}" = "-h" ] || [ "${1}" = "--help" ] || [ "${1}" = "help" ] +then + # On appelle la fonction help + help + # Et on quitte le script + exit 0 +fi + +# Vérification du nombre d'arguments: +case $# in + 2 ) # 2 arguments + # Si le premier argument n'est pas un fichier + if [ ! -f "${1}" ] + then + echo "!!ERREUR: mauvais premier argument!!" + # On affiche l'aide + help + # Puis on quitte le script + exit 1 + + # Sinon, si le deuxième argument n'est pas un dossier + elif [ ! -d "${2}" ] + then + echo "!!ERREUR: mauvais deuxième argument!!" + # On affiche l'aide + help + # Et on termine le script + exit 1 + + # Sinon, c'est que tous les arguments sont corrects + else + echo "Analyse de ${1} ..." + fi + ;; + 0 ) # 0 argument + echo "!!ERREUR: aucun argument présent!!" + # On affiche l'aide + help + # Et on termine le script + exit 1 + ;; + * ) # Plus d'un argument + echo "ERREUR: Vous ne pouvez pas mettre plus de deux arguments" + # On affiche l'aide + help + # Et on termine le script + exit 1 + ;; +esac +# Fin de la gestion des arguments + +# On vérifie que le dossier où vont être sauvegardés les fichiers existe +[ ! -d "${save_dir}" ] && mkdir -p "${save_dir}" + +# On se place dans le dossier où sauvegarder les fichiers télécharger +cd ${save_dir} + +# On télécharge les liens contenu dans le fichier +# Options: +# -n 1: le nombre maximum de paramètre envoyé est de 1 +# -P 10: wget sera lancé 10 fois (en parallèle) +cat ${list_url} | xargs -n -P 10 wget + +# On revient au dossier précédent +cd - > /dev/null + + + +exit 0 +# Fin de la boucle principale +# ----------------------------------------------------------- +# ********************************************************************************************** + diff --git a/youtube-dl b/youtube-dl new file mode 100755 index 0000000..98af11e --- /dev/null +++ b/youtube-dl @@ -0,0 +1,11 @@ +#!/usr/bin/python + +# -*- coding: utf-8 -*- +import re +import sys + +from youtube_dl import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/zsh_doc b/zsh_doc new file mode 100755 index 0000000..6d4b0d9 --- /dev/null +++ b/zsh_doc @@ -0,0 +1,32 @@ +#!/bin/sh +# +# Parse the zshrc file and print a alias's definition + +LIST_ALIAS=$(cat /etc/zsh/zshrc | grep -v '^#' | grep '^[a-zA-Z].*#.*' | cut -d '#' -f2-) + +NUMBER_ALIAS=$(cat /etc/zsh/zshrc | grep -v '^#' | grep '^[a-zA-Z].*#.*' | cut -d '#' -f2- | wc -l) + +NUM_ALIAS=$((echo $RANDOM % ${NUMBER_ALIAS} + 1 | bc)) + +#r=$(( echo $RANDOM % 10 )) +#r=$(($RANDOM) +#r=$RANDOM + +#printf 'There is %s alias in my zshrc file. And i choose the %s\n' ${NUMBER_ALIAS} ${NUM_ALIAS} + +#printf 'Random = %s\n' ${RANDOM} +#printf 'r = %s\n' ${r} + +#echo $RANDOM % ${NUMBER_ALIAS} + 1 | bc + +#AWKSCRIPT=' { srand(); print int(rand() * 50) } ' +AWKSCRIPT=' { srand(); print int(rand() * $1) } ' +# Command(s) / parameters passed to awk +# Note that srand() reseeds awk's random number generator. } ' + +echo -n "Random number between 0 and 1 = " + +echo | awk "$AWKSCRIPT" +# What happens if you leave out the 'echo'? + +exit 0