Change screen position
This commit is contained in:
parent
63fff3f4c3
commit
587c2731b1
|
@ -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]."&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;
|
||||
}
|
|
@ -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
|
||||
# -----------------------------------------------------------
|
||||
# **********************************************************************************************
|
||||
|
||||
|
|
@ -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
|
||||
# -----------------------------------------------------------
|
||||
# **********************************************************************************************
|
||||
|
||||
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||
# -----------------------------------------------------------
|
||||
# **********************************************************************************************
|
||||
|
|
@ -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
|
||||
# -----------------------------------------------------------
|
||||
# **********************************************************************************************
|
||||
|
||||
|
|
@ -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
|
||||
# -----------------------------------------------------------
|
||||