Change screen position

This commit is contained in:
gardouille 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
# -----------------------------------------------------------
# **********************************************************************************************
# **********************************************************************************************
#
# Fichiers globaux
#
# -----------------------------------------------------------
#
# 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) $*" ; }
# Fin des fonctions globales
# -----------------------------------------------------------
# **********************************************************************************************
# **********************************************************************************************
#
# Programme principale
#
# -----------------------------------------------------------
echo $titre1$titre2$titre3$titre4$titre5$titre6$code$cmd_bash$file$file_type$gras$italique$liste_num$image > $expression
sed --file="${expression}" "${file_in}" > "${file_out}"
echo "-------------------------------"
echo "-------------------------------"
echo "Rajouter au début du fichier (avant le titre):"
echo "#language fr
||<tablestyle=\"width: 100%; border: 0px hidden\">~-Traduction(s): [[$file_in|English]] - Français||
----
<<TableOfContents()>>"
exit 0
# Fin de la boucle principale
# -----------------------------------------------------------
# **********************************************************************************************

51
download_lirescan.sh Executable file
View File

@ -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

70
download_online_manga.sh Executable file
View File

@ -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

2
ecran
View File

@ -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

160
emy_sms.py Executable file
View File

@ -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 lespoir quil vous sera utile, mais SANS
# AUCUNE GARANTIE : sans même la garantie implicite de COMMERCIALISABILITÉ
# ni dADÉ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 nest pas le cas, consultez: <http://www.gnu.org/licenses/gpl.html>.
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 = """<entry xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005'>
<category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category>
<title type='text'>%s</title>
<content type='text'>%s</content>
<author>
<name>%s</name>
<email>%s</email>
</author>
<gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency>
<gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus>
<gd:where valueString='%s'></gd:where>
<gd:when startTime='%s' endTime='%s'><gd:reminder minutes='5' /></gd:when>
</entry>""" % (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()

23
fpm Executable file
View File

@ -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)

BIN
idok-x86_64 Executable file

Binary file not shown.

View File

@ -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

13
jolla_mount Executable file
View File

@ -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

View File

@ -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

26
log_zenity_generator.log Executable file
View File

@ -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 : <b> texte </b>
- Mise en italique : <i> Texte </i>
- Mise en couleur : <span color=\"red\"> texte </span> (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"

BIN
ms-sys Executable file

Binary file not shown.

92
pubkey.sh Executable file
View File

@ -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
# -----------------------------------------------------------
# **********************************************************************************************

18
remount Executable file
View File

@ -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

23
rubygems-cabin-test Executable file
View File

@ -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)

10
scdl Executable file
View File

@ -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')()
)

86
script_shell Executable file
View File

@ -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
# -----------------------------------------------------------
# **********************************************************************************************

25
sed_expression.exemple Executable file
View File

@ -0,0 +1,25 @@
s/^====== /= / titre1
s/ ======$/ =/
s/^===== /== / titre2
s/ =====$/ ==/
s/^==== /=== / titre3
s/ ====$/ ===/
s/^=== /==== / titre4
s/ ===$/ ====/
s/^== /===== / titre5
s/ ==$/ =====/
s/^= /====== / titre6
s/ =$/ ======/
s/<code>/{{{/ code
s/<\/code>/}}}/
s/<code \(bash\)>/{{{#!highlight \1/ cmd/code bash
s/<file>/{{{/ fichier
s/<\/file>/}}}/
s/<file \(.*\) .*/{{{#!highlight \1/ fichier avec un type
s/\*\*/\'\'\'/g gras
s/\/\//\'\'/g italique
s/\(^ *\)-/\11\./ liste numérotée
s/{{:\(.*\)|}}/{{attachement:\1}}/ image
sed '/^[^#]*$/d' bin/wol | sed 's/[^#]*#//g' Uniquement ce qui se trouve après un #

26
seeksinglucky.py Executable file
View File

@ -0,0 +1,26 @@
#!/usr/bin/env python
import urllib
import json
import sys
import os
proxy = {'http': 'http://localhost:8250'}
node="http://s.s/search?output=json&action=expand&expansion=1&q="
if __name__=="__main__":
query_str = sys.argv[1:]
query = urllib.quote("+".join(query_str))
raw_page = urllib.urlopen(node + query, proxies=proxy)
page = raw_page.read()
try:
content = json.loads(page)
except:
raise
print("Server's JSON is corrupted")
snippets = content["snippets"]
if len(snippets) == 0:
print('No results')
os.system('iceweasel %s' % snippets[0]['cite'])
#os.system('x-www-browser %s' % snippets[0]['cite'])

57
send_to_kodi Executable file
View File

@ -0,0 +1,57 @@
#!/bin/sh
# Tiny script to send url, file, video, img, … to a Kodi instance.
# Use idok script. Please see https://github.com/metal3d/idok
# Works with Nautilus, Caja, …
# Nautilus: cp send_to_kodi ~/.local/share/nautilus/scripts/ ; chmod +x ~/.local/share/nautilus/scripts/send_to_kodi
# Nemo: cp send_to_kodi ~/.gnome2/nemo-scripts/ ; chmod +x ~/.gnome2/nemo-scripts/send_to_kodi
# Caja: cp send_to_kodi ~/.config/caja/scripts/ ; chmod +x ~/.config/caja/scripts/send_to_kodi
################################################
# notification depends of system #
################################################
notif() {
# the script is running in a term
if [ $(env | grep '^TERM') ]; then printf "\n#### $(basename -- "$0") notification ####\n ⇒ $1\n\n"
else # in x, notifications
if command -v xmessage 2>/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

313
sync_config_file.sh Executable file
View File

@ -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

25
synchro_wiki.sh Executable file
View File

@ -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

24
update_repo_git.sh Executable file
View File

@ -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"

11
virtualenv Executable file
View File

@ -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())

166
wget_list Executable file
View File

@ -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
# -----------------------------------------------------------
# **********************************************************************************************

11
youtube-dl Executable file
View File

@ -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())

32
zsh_doc Executable file
View File

@ -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