# [SCRIPT] Sauvegarder vos fichiers simplement et rapidement

## loopx

Bonsoir, j'ai créé (étant assez pourri, et vu que j'ai peur de perdre mes jolis fichiers de configs et autres) ce script qui a pour but de sauvegarder tout et n'importe quoi, selon bien sur une liste de fichier important. Il est "portable" dans le sens ou on peu l'exécuter sur n'importe quel linux (normalement). 

Ce script est codé .. hum ... en bash   :Laughing:     c'est pourquoi il est possible qu'il fonctionne sur tout système UNIX même très basique ...   :Cool: 

Fonctionnalités:

- permet de lister les fichiers/répertoires important présent sur le système

- permet la sauvegarde dans une archive

- permet la sauvegarde via FTP de l'archive précédante

- auto-génération du fichier contenant les chemins vers les différents fichiers/répertoires important (à mettre à jour selon vos besoin)

- auto-sauvegarde de lui-même (il serait désastreux d'avoir tout sauvé sauf le script qui a fait le boulot pour vous   :Wink:  )

Utilisation:

- sh pix-save.sh

- ./pix-save.sh (nécessite de donner le droit d'exécution préalablement: chmod +x pix-save.sh)

Par défaut, l'exacution de ce script demande un utilisateur ROOT et affiche l'aide si aucun paramètre n'est précisé.

Paramètres:

- --help: affiche l'aide

- --check: vérifie la présence des fichiers/répertoires important

- --save: sauvegarde vos fichiers/répertoires dans une archive

- --save --ftp: sauvegarde vos fichiers/répertoires localement et via FTP

Configurations: voir début du script ...

Personnalisation:

  Après le premier lancement du script (--check ou --save), celui-ci va auto-générer un fichier appelé 'pix-save.data'. Ce fichier peut être mis à jour pour ajouter/supprimer des chemins absolu vers des fichiers ou des répertoires importants. Vous avez aussi la possibilité de modifier directement le script au niveau de la fonction 'generate_save_list()' qui a pour but de générer ce fichier 'pix-save.data'.

Nom du script: PiX-SAVE

Version actuelle: 1.0

Date de sortie: 13/12/2007

Les +:

- rapide

- efficace (si on oublie pas d'ajouter des chemins ...)

- copie de l'archive sur une autre machine

- en francais   :Very Happy: 

Copier-coller le code si dessous dans un fichier que vous nomerez: pix-save.sh

Vous n'avez plus qu'a l'exécuter   :Wink: 

```

#!/bin/bash

# by loopx

# 13/12/2007

############

#emplacement de ce script

THIS_PATH=$(pwd)

SCRIPT_NAME=$0

#Version

VERSION="1.0"

#Nom du fichier contenant la liste des fichiers/repertoires a sauvegarder

SAVE_LIST="pix-save.data"

#contient le chemin complet vers la liste des configs

SAVE_LIST_PATH=$THIS_PATH/$SAVE_LIST

#type d'archive 'tar' and 'tar.bz2'

ARCHIVE_TYPE="tar.bz2"

#emplacement du repertoire temporaire

TMP_PATH="/tmp/pix-save-tmp"

##############################################################################

#Permet d'afficher la date et l'heure

datetime() { 

   echo "Date et Heure:"  $(date)

}

#Permet le nettoyage du sous repertoire 'pix-save'

remove_temporary_folder() { 

   echo 

   echo -n "> Suppression du répertoire temporaire '"$TMP_PATH"' ... "

   rm -rf $TMP_PATH

   if [ -e "$TMP_PATH" ]; then 

      echo "erreur"

      echo "  Il semble que '"$TMP_PATH"' n'a pu être supprimé ! :o"

   else

      echo "OK"

   fi

}

#Permet de generer le fichier liste contenant les fichiers de configs les plus connus

#Il pourra etre modifie par apres (ou alors, modifier ce script)

generate_save_list() {

   echo "> Generation de la liste de fichier de configurations par defaut dans '"$SAVE_LIST_PATH"'..."

   echo "> N'hésitez pas à le modifier selon vos besoins..."

   echo

   touch $SAVE_LIST_PATH

   if [ -e "$SAVE_LIST_PATH" ]; then 

      echo "  Création du fichier: OK"

   else

      echo "  !!! Création du fichier: KO (impossible de creer le fichier, permission refusee ???)"

      exit 1

   fi

   #configuration système

   echo /boot/grub/grub.conf >> $SAVE_LIST_PATH

   echo /etc/apache2/ >> $SAVE_LIST_PATH

   echo /etc/bind/ >> $SAVE_LIST_PATH

   echo /etc/conf.d/ >> $SAVE_LIST_PATH

   echo /etc/dhcp/dhcpd.conf >> $SAVE_LIST_PATH

   echo /etc/exports >> $SAVE_LIST_PATH

   echo /etc/firewall/ >> $SAVE_LIST_PATH

   echo /etc/fstab >> $SAVE_LIST_PATH

   echo /etc/group >> $SAVE_LIST_PATH

   echo /etc/hosts >> $SAVE_LIST_PATH

   echo /etc/laptop-mode/laptop-mode.conf >> $SAVE_LIST_PATH

   echo /etc/lilo.conf >> $SAVE_LIST_PATH

   echo /etc/make.conf >> $SAVE_LIST_PATH

   echo /etc/modules.autoload.d/kernel-2.6 >> $SAVE_LIST_PATH

   echo /etc/mplayer.conf >> $SAVE_LIST_PATH

   echo /etc/named/ >> $SAVE_LIST_PATH

   echo /etc/openvpn/ >> $SAVE_LIST_PATH

   echo /etc/quagga/ >> $SAVE_LIST_PATH

   echo /etc/rc.conf >> $SAVE_LIST_PATH

   echo /etc/resolv.conf >> $SAVE_LIST_PATH

   echo /etc/rsyncd.conf >> $SAVE_LIST_PATH

   echo /etc/samba/ >> $SAVE_LIST_PATH

   echo /etc/ssh/ >> $SAVE_LIST_PATH

   echo /etc/vsftpd/ >> $SAVE_LIST_PATH

   echo /etc/X11/xorg.conf >> $SAVE_LIST_PATH

   echo /usr/src/linux/.config >> $SAVE_LIST_PATH

   echo /root/script/ >> $SAVE_LIST_PATH

   echo /var/www/localhost/ >> $SAVE_LIST_PATH

   #configuration simple utilisateur

   echo $(echo '$USER_HOME_PATH')"/.amsn/" >> $SAVE_LIST_PATH

   echo $(echo '$USER_HOME_PATH')"/.kde/Autostart/" >> $SAVE_LIST_PATH

   echo $(echo '$USER_HOME_PATH')"/.xbindkeysrc" >> $SAVE_LIST_PATH

   echo $(echo '$USER_HOME_PATH')"/.xinitrc" >> $SAVE_LIST_PATH

   echo $(echo '$USER_HOME_PATH')"/.Xmodmap" >> $SAVE_LIST_PATH

   echo $(echo '$USER_HOME_PATH')"/startxgl" >> $SAVE_LIST_PATH

   echo $(echo '$USER_HOME_PATH')"/workspace" >> $SAVE_LIST_PATH

   echo "   Génération: TERMINEE"

   echo

}

#Vérifie la présence de la liste des fichiers/repertoires à sauvegarder; autogénération si introuvable

check_save_list() {

   if [ ! -e "$SAVE_LIST_PATH" ]; then

      echo "> Le fichier '$SAVE_LIST_PATH' est introuvable: AUTO-GENERATION requise..."

      generate_save_list

   else

      echo "> Le fichier '$SAVE_LIST_PATH' existe déjà; il ne sera pas remplacé."

   fi

   echo

}

#Début d'action du script (--check, --save)

main() {

   check_save_list

   #récupérer le chemin vers le HOME de l'utilisateur principal

   echo "> Vérification en cours ..."

   echo

   echo "  Veuillez indiquer le chemin vers le répertoire simple utilisateur (optionnel, ex: '/home/loopx') :"

   echo -n "  > "

   read USER_HOME_PATH

   echo

   #vérifier la saisie précédante

   if [ -z $USER_HOME_PATH ]; then 

      echo "> Aucun répertoire utilisateur ne sera pris en compte"

      echo

   else

      if [ -e $USER_HOME_PATH ]; then 

         echo "> Répertoire utilisateur validé"

         echo

      else

         echo "!!! Répertoire utilisateur introuvable: '"$USER_HOME_PATH"' !"

         exit 1

      fi

   fi

   echo "> NOTE: les fichiers ci-dessous, qui ont été trouvé, feront partie de l'archive ..."

   echo

   #vérification de la présence des fichiers/répertoires

   nb_found=0

   nb_total=0

   for FICHIER in $(cat $SAVE_LIST_PATH); do 

      #re-evaluate the variable for change $USER_HOME_PATH to /home/blabla

      FICHIER=$(eval echo $FICHIER)

      nb_total=$(( $nb_total + 1 ))

      if [ -e $FICHIER ]; then 

         echo -e "\t***" $FICHIER "=> trouvé"

         nb_found=$(( $nb_found + 1 ))

      else

         #on précise qu'un fichier est introuvable uniquement si c'est un check

         if [ $STATE = "check" ]; then

            echo -e "\t***" $FICHIER "=> pas trouvé"

         fi

      fi

   done

   echo

   echo "=> En résumé:"

   echo "===> "$nb_found"/"$nb_total" configurations à sauvegarder ..."

   echo "=============================================>"

   echo

   #sauvegarde des fichiers/répertoires

   if [ $STATE = "save" ]; then

      echo

      echo

      echo "> NOTE: la liste précédente affiche les configurations trouvées. Si il en manque, veuillez mettre à jour le fichier '"$SAVE_LIST_PATH"'."

      echo "    Si vous désirer arrêter ce script maintenant, vous pouvez utiliser les touches CTRL+C ..."

      echo

      echo "> Copie en cours ..."

      echo "  Ou voulez-vous que l'archive soit créée ('/root' par défaut) ?"

      echo -n "  > "

      read ARCHIVE_PATH

      echo

      #régler la valeur par défaut de ARCHIVE_PATH, la destination de l'archive contenant les sauvegardes

      if [ -z $ARCHIVE_PATH ]; then 

         ARCHIVE_PATH="/root"

         if [ -e $ARCHIVE_PATH ]; then 

            echo "> L'archive sera sauvegardée dans le répertoire '"$ARCHIVE_PATH"'..."

            echo

         else

            echo "> '"$ARCHIVE_PATH"' n'existe pas! Utilisation du répertoire utilisateur de ROOT défini dans le shell ..."

            echo

            ARCHIVE_PATH=$HOME 

            if [ -e $ARCHIVE_PATH ]; then 

               echo "> L'archive sera sauvegardée dans le répertoire '"$ARCHIVE_PATH"'..."

               echo

            else 

               echo "!!! '"$ARCHIVE_PATH"', défini dans les variables d'environnement, est introuvable. Aucun répertoire valide n'a été trouvé pour le stockage de l'archive !"

               exit 1

            fi

         fi

      elif [ -e $ARCHIVE_PATH ]; then

         echo "> L'archive sera sauvegardée dans le répertoire '"$ARCHIVE_PATH"'..."

         echo

      else

         echo "!!! '"$ARCHIVE_PATH"' est introuvable !"

      fi

      #création du répertoire temporaire

      echo -n "> Création du répertoire temporaire ... "

      mkdir -p $TMP_PATH

      #vérification du répertoire temporaire

      if [ -e $TMP_PATH ]; then

         echo "OK"

         #vérification de la présence d'un ancien répertoire de configs

         if [ -e "$TMP_PATH/files_to_save" ]; then 

            echo "> ATTENTION: un répertoire 'files_to_save' se trouvant dans '"$TMP_PATH"' à été trouvé."

            echo "  Ce répertoire ne devrait pas exister; il provient peut-être d'une ancienne sauvegarde..."

            echo "  Par sécurité, veuillez déplacer, ou supprimer, ce répertoire 'files_to_save' !"

            echo "!!! '"$TMP_PATH"/files_to_save' ne doit pas exister lors de l'execution de ce script !"

            exit 1 

         fi

         mkdir -p $TMP_PATH/files_to_save

         echo -n "> Creation du sous repertoire temporaire: '"$TMP_PATH"/files_to_save' ... "

         if [ -e $TMP_PATH/files_to_save ]; then 

            echo "OK"

            echo

         else

            echo "KO"

            echo "!!! Impossible de créer le répertoire temporaire '"$TMP_PATH/files_to_save"' !"

            exit 1

                        fi 

      else

         echo " KO"

         echo "!!! Impossible de créer le répertoire '"$TMP_PATH"' !"

         exit 1

      fi

      echo "> Entrez le nom de l'archive (optionnel) :"

      echo -n "  > "

      read ARCHIVE_NAME

      echo

      #régler le nom de l'archive par défaut (=nom du pc)

      if [ -z $ARCHIVE_NAME ]; then

         ARCHIVE_NAME="cfg-"$(hostname)

      fi

      echo "> Nom complet du fichier archive: '"$ARCHIVE_NAME"."$ARCHIVE_TYPE"'"

      echo

      echo 

      echo "> Sauvegarde en cours ..."

      echo

   

      #sauvegarde des fichiers/répertoires

      nb_saved=0

      for FICHIER in $(cat $SAVE_LIST_PATH); do 

         #re-evaluate the variable for change $USER_HOME_PATH to /home/blabla

         FICHIER=$(eval echo $FICHIER)

   

         if [ -e $FICHIER ]; then

            nb_saved=$(( $nb_saved + 1 ))

            echo -n -e $nb_saved"/"$nb_found"\t***" $FICHIER "=> en cours ... "

            #copie des fichier/répertoires dans le répertoire temporaire

            cp -r $FICHIER $TMP_PATH/files_to_save

            

            echo "OK"

         fi

      done

      echo

      echo -n "> Je m'auto-sauvegarde :-) ... "$THIS_PATH/$SCRIPT_NAME" ... "

      cp $THIS_PATH/$SCRIPT_NAME $TMP_PATH/files_to_save

      echo "OK"

      echo

      #creation de l'archive

                #cd $PATH_CONF

      echo -n "> Création de l'archive "

      if [ $ARCHIVE_TYPE = "tar" ]; then 

         echo -n "'TAR' ... "

         #création de l'archive à l'aide de la commande TAR

                        tar cf $ARCHIVE_PATH/$ARCHIVE_NAME.$ARCHIVE_TYPE $TMP_PATH/files_to_save

                elif [ $ARCHIVE_TYPE = "tar.bz2" ]; then 

         echo -n "'TAR.BZ2' ... "

         #création de l'archive à l'aide de la commande TAR

         tar cjf $ARCHIVE_PATH/$ARCHIVE_NAME.$ARCHIVE_TYPE $TMP_PATH/files_to_save

                else

         echo "!!! Format d'archive non supporté: "$ARCHIVE_TYPE

         echo "Veuillez vérifier la configuration de ce script !"

         remove_temporary_folder

         exit 1

      fi

      echo "terminé"

                echo

                echo "> Vous trouverez l'archive ici: "$ARCHIVE_PATH/$ARCHIVE_NAME.$ARCHIVE_TYPE

                echo

      remove_temporary_folder

      #sauvegarde via ftp

      if [ $ARG2 = '--ftp' ]; then

         echo

         echo

         echo "> Sauvegarde de l'archive via FTP en cours..."

         echo

         echo -n "  > Vérification de la présence de 'FTP' ... "

         if [ -e "/usr/bin/ftp" ] || [ -e "/usr/sbin/ftp" ] || [ -e "/bin/ftp" ] || [ -e "/sbin/ftp" ]; then

            echo "trouvé"

         else

            echo "introuvable !"

            echo "!!! Veuillez installer la commande FTP sur votre système !"

            exit 1

         fi

         echo

         echo -n -e "\t> Entrez le nom ou l'IP du serveur FTP distant: "

         read HOST_NAME

         echo

         echo -n -e "\t> Entrez le nom d'utilisateur: "

         read USER_NAME

         echo

         echo -n -e "\t> Entrez le chemin où l'archive sera copiée (optionnel): "

         read FTP_PATH

         echo

         #vérification du chemin, utilisation du HOME si non spécifié

         if [ -z $FTP_PATH ]; then

            FTP_PATH="~"

         fi

         #se placer dans le répertoire ou se trouve l'archive

         cd $ARCHIVE_PATH

#NE PAS METTRE DE TABULATION A CET ENDROIT!!! NI D'ESPACE A LA FIN DE CES LIGNE !!! (pour le ftp)

#Dans le cas contraire, vous obtiendrez des erreurs ...!!!

ftp -n $HOST_NAME <<End-of-Session

user $USER_NAME

binary

cd $FTP_PATH

put $ARCHIVE_NAME.$ARCHIVE_TYPE

bye

End-of-Session

         echo

         echo "> Fin de la session FTP, si aucune erreur ne s'ai produite, c'est que le fichier a correctement été transféré :-)" 

      fi

   fi

}

#Aide l'utilisateur à composer correctement la ligne appelant ce script

help() {

   echo "> Vous êtes perdu ? Pas de panique, lisez ce qui suit :"

   echo

   echo "  Le script 'PiX-SAVE' à pour but d'automatiser la sauvegarde des fichiers ou répertoires sensible sur un système UNIX. "

   echo

   echo "  Voici la liste complète des paramètres pris en compte :"

   echo "    '--help'  : afficher ce message d'aide."

   echo "    '--check' : permet de scanner la liste des configurations dans l'unique but de savoir s'ils sont présents sur le système."

   echo "    '--save'  : identique à '--check', mais va en faire une sauvegarde dans une archive local au système."

   echo "    '--save --ftp' : identique à '--save' mais permet la copie de l'archive sur un serveur FTP via l'utilisation de la commande 'ftp'."

}

########################################################################### 

# DEBUT DU SCRIPT

###########################################################################

#le tag (généré par figlet)

echo " ____  ___  __    ____    ___     _______"

echo "|  _ \(_) \/ /   / ___|  / \ \   / / ____|"

echo "| |_) | |\  /____\___ \ / _ \ \ / /|  _|"

echo "|  __/| |/  \_____|__) / ___ \ V / | |___"

echo "|_|   |_/_/\_\   |____/_/   \_\_/  |_____|"

echo -e "\t= = > VERSION "$VERSION "< = ="

echo

#seul root peut executer ce script

if [ $(whoami) != root ]; then 

   echo "Désolé, vous devez être ROOT pour utiliser ce script"

   exit 1

fi

echo -e "NOTE: ce script va s'auto-sauvegarder lors de l'archivage de vos configuration :-)"

sleep 1

echo 

echo -e "\tCommande appelante:" $0 $1 $2 

echo 

echo 

if [ -z "$1" ]; then 

   help

elif [ "$1" = "--check" ]; then 

   STATE="check"

   main

elif [ "$1" = "--save" ]; then 

   STATE="save"

   #récuperer le 2ème paramètre: il est invisible à partir d'une fonction

   if [ -z $2 ]; then 

      ARG2="nothing"

   else

      ARG2=$2 

   fi

   main

elif [ "$1" = "--help" ]; then

   help

elif [ "$1" = "--generate-save-list" ]; then

   check_save_list

else

   echo "> Option incorrecte! Consultez l'aide pour de plus amples informations :"

   echo "  './pix-save.sh --help' pour afficher l'aide."

fi

echo

echo "A bientot ;-)" 

```

J'espère que vous l'essaierez et que vous l'apprécierez   :Wink: 

N'oubliez pas de me renvoyer vos impressions et vos remarques / bugs / fonctionnalités manquantes, je pourrais faire en sorte de l'améliorer un peu   :Surprised: 

IMPORTANT: lors du copier-coller, vérifié que les longues lignes n'ont pas été coupé en 2 ... cela poserais un problèmes syntaxique suivit peut être d'une erreur de logique ... De plus, à un endroit, il est indiqué qu'il ne faut absolument PAS mettre de tabulation ou d'espace pour respecter l'indentation. Si vous le faites, la fonctionalité FTP de ce script ne fonctionnera plus: erreur de syntaxe ou un truc du genre ...   Donc, merci de vérifier à 2 fois avant de me dire que le script ne s'exécute même pas   :Smile: 

----------

## loopx

Mise à jour: séparation des données et du script.

Mise à jour2: only root, on peu faire ENTER sans se prendre la tete  :Smile: 

Mise à jour 3: super, j'ai plus de problème avec le ftp, ai rendu le script un rien plus modulaire aussi et rajouter des check pour éviter que le script ne fasse des bêtises  :Wink: 

Mise à jour 4: generation du fichier 'conf-list' si nécessaire

Mise à jour 5: deux langue disponible: francais et anglais

TODO: 

- utilisation de sftp

- vérif que les commandes utilisée existe bien

- check de certaine option AVANT d'arriver à la compression (genre le type de sauvegarde, .tar ou .tar.bz2)

- utilisation des options passé en paramètre pour ne pas les demander lors de l'exécution (aie, ca risque de faire mal ca   :Rolling Eyes: )

- possibilité de regénérer le fichier 'conf-list' à partir du script seul (ca doit etre facile à faire  :Smile:  et en plus, plus qu'un fichier à faire transferer pour le répendre. Tiens, ca pourrait meme etre automatique  :Smile:    Je commence à bien aimer les scripts bash  :Wink:  [Oki]

- demander à l'utilisateur si il veut ou non une generation automatique du 'conf-list'

- refaire la présentation du script ...  :Very Happy: 

----------

## titoucha

 *loopx wrote:*   

> 
> 
> Ah, désolé, j'ai préféré la langue universelle au francais  
> 
> J'espère que ca va pas faire en sorte que personne ne le teste 
> ...

 

Avant que je ne tombe sur cette petite phrase je me suis demandé pourquoi tout était en anglais, je trouve un peu dommage de ne pas mettre les messages en français, car si ton programme fonctionne bien il risque d'y avoir quelqu'un qui va devoir le traduire, c'est un comble   :Shocked: 

PS. c'est une remarque générale sur le programmeur francophone qui sort son programme en anglais et même pas dans sa langue natale.

----------

## loopx

Héhéhéhé   :Laughing: 

Ben, c'est pour faire un peu progresser mon anglais   :Rolling Eyes: 

Mais tu me fais penser à un truc... Et si je faisais un autre fichier pour la langue   :Laughing:  avec une auto-génération et un tit menu lors de la première install   :Wink: 

Ca parrait un peu compliqué tout de meme... Il va falloir y réfléchir.

----------

## titoucha

En fait ton bout de code à fait resortir un certain agassement car j'ai vu pas mal de programmeur francophonne qui ne prennent même plus la peine de programmer dans leur propre langue, alors que je vois au même moment M$ qui sort des traduction dans des langues que je ne connais même pas.

En plus le français et la francophonie c'est pas quand même rien, heeeuuu je suis entrain de m'emballer, c'est bon je -----> []

PS: tu l'as compris la remarque n'avait rien de personnelle

----------

## Magic Banana

Je pense au contraire qu'il est bon de programmer en anglais. Il s'agit d'un logiciel libre. Tout le monde devrait pouvoir l'utiliser et comprendre facilement le code pour des améliorations futures. Comme l'anglais est la langue internationale...

Ceci ne va pas à l'encontre du fait qu'il est très bon de fournir des traductions des logiciels. Bien au contraire. Cela va dans le sens de ce que je viens d'écrire.

----------

## man in the hill

 *titoucha wrote:*   

> En plus le français et la francophonie c'est pas quand même rien ...

 

+ 1   :Laughing:  ... 

 *Magic Banana wrote:*   

> Je pense au contraire qu'il est bon de programmer en anglais. Il s'agit d'un logiciel libre. Tout le monde devrait pouvoir l'utiliser et comprendre facilement le code pour des améliorations futures. Comme l'anglais est la langue internationale... Ceci ne va pas à l'encontre du fait qu'il est très bon de fournir des traductions des logiciels. Bien au contraire. Cela va dans le sens de ce que je viens d'écrire. 

 

Moi, personnellement qui commence à programmer modestement avec Ruby et pense en français, même si les mots clé sont tjrs en anglais pour tous les langages donc facile de voir le travail du code pour un bon programmeur , je me vois mal écrire mon code en anglais qui pourrait m'empêcher de le voir clairement, si j'ai à revenir sur mon code qques temps après car mes variables et surtout mes commentaires sont très importants pour moi ... Et même si je capte pas mal l'anglais cela me gave tjrs d'utiliser un logiciel en anglais et si c'est un logiciel complexe   :Twisted Evil:  ...  

je crois bien que Loopx à un peu abusé en postant son script en anglais dans un sous forum français alors qu'il y a le forum en anglais Documentation, Tips & Tricks  :Wink: , et  si lui il a besoin d'améliorer son anglais ce n'est pas ce qui nous intéresse en tant qu'utilisateur !  En plus vu que je me suis tapé la traduction de mon script, je ne vois pas pourquoi il ne le ferais pas   :Very Happy:  car son script n'est pas si long que cela !...  Enfin la présentation sans balise bbcode laisse vraiment à désirer !  Tu trouvras de meilleurs exemples mais regarde comment je présente en gros un code https://forums.gentoo.org/viewtopic-t-496528.html  et c'est pareil pour le ChangeLog et le TODO ...  Tout cela est totalement amical  sinon je n'aurais pas perdu mon temps à l'écrire   :Wink:  !

                                                                               @ +

----------

## loopx

 *titoucha wrote:*   

> En fait ton bout de code à fait resortir un certain agassement car j'ai vu pas mal de programmeur francophonne qui ne prennent même plus la peine de programmer dans leur propre langue, alors que je vois au même moment M$ qui sort des traduction dans des langues que je ne connais même pas.
> 
> En plus le français et la francophonie c'est pas quand même rien, heeeuuu je suis entrain de m'emballer, c'est bon je -----> []
> 
> PS: tu l'as compris la remarque n'avait rien de personnelle

 

Mais ne t'inquiète pas, je vais pas me facher pour si peu, bien que le fait que tu dis que tu sois agassé ...

Rien n'empeche les gens de retraduire en effet, meme si ca crain si il y a des mises à jour. Tu sais, je fais un tit script bash pour m'aider, pour apprendre, alors pourquoi pas essayer un truc en 2 langues ? 

Maintenant, c'est vrai, je laisse le francais de coté et pire, j'ai surement fais plein de faute. Encore désolé, mais le but étant aussi de faire un peu d'anglais   :Rolling Eyes: 

Maintenant, c'est pas pour ca que je le passerai pas en francais, j'aimerai juste ne pas retiré ce que j'ai déjà placé (=> pas repasser en fr, mais plutot ajouter le fr ...).

Help me if you can   :Wink: 

----------

## loopx

 *man in the hill wrote:*   

> je crois bien que Loopx à un peu abusé en postant son script en anglais dans un sous forum français alors qu'il y a le forum en anglais Documentation, Tips & Tricks , et  si lui il a besoin d'améliorer son anglais ce n'est pas ce qui nous intéresse en tant qu'utilisateur ! 

 

Mouais, bon, arretez de vous embaler comme ça, c'est bon!!! Jvais vous le pondre en francais aussi quand j'aurais trouvé le moyen ! Si j'ai pas été sur le forum en anglais, c'est parce que celui en francais est mieux, plus sympatique et surtout, c'est de la que je "viens" on va dire...

Tout est question de langue universelle. Que vont dire les chinoix si ils veulent utiliser mon script   :Laughing: 

@man in the hill: tout ca ne me dit pas si tu as déjà testé la nouvelle version, avec le binary, tu auras plus de probz à mon avis (permission denied), pourrais-tu confirmer ?

Pour la présentation de mon code, moui, si tu veux  :Smile: 

Je trouve que c'est déjà fort claire (sauf les explications) mais bon, si tu veux, aux prochain post, je ferais le ménage. Je dois dire que c'est assez pénible de formatter sur un forum, mais bon faut bien le faire   :Rolling Eyes: 

EDIT: je cherche un howto bash mais plus complet que celui la: http://www.tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html

Je sais pas comment gérer les arguments de mon script (pour que ca fonctionne en les mettants dans n'importe quel sens par exemple. Et aussi, comment peut on faire un NOT en bash, pour ce if : if [ -e fichier ]  (je dois faire un if/else au lieu d'un if seul, parce que je dois vérifier que le fichier n'existe pas). Enfin, je vais y regarder...

J'aimerai qu'on me donne quelque proposition pour la "technique de traduction", comme ca je serais un peu plus aimé   :Laughing:   :Cool: 

EDIT2: il me faudrait une commande qui permet la lecture complète AVEC espace de la ligne X d'un fichier donné (ainsi, ben je mets toutes les phrases dans ce fichier   :Rolling Eyes:   Ca commence à devenir massif ce tit script

----------

## Magic Banana

Voilà ce que tu cherches : http://personal.riverusers.com/~thegrendel/abs-guide-4.0.tar.bz2

Et puis ça te fera encore un peu travailler ton anglais.  :Wink: 

----------

## loopx

Oh, merci beaucoup  :Smile: 

----------

## man in the hill

 *loopx wrote:*   

>  @man in the hill: tout ca ne me dit pas si tu as déjà testé la nouvelle version, avec le binary, tu auras plus de probz à mon avis (permission denied), pourrais-tu confirmer ? 

 

En fait tjrs pas !  Même sortie !

 *loopx wrote:*   

>  EDIT: je cherche un howto bash mais plus complet que celui la: http://www.tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html
> 
> Je sais pas comment gérer les arguments de mon script (pour que ca fonctionne en les mettants dans n'importe quel sens par exemple. Et aussi, comment peut on faire un NOT en bash, pour ce if : if [ -e fichier ]  (je dois faire un if/else au lieu d'un if seul, parce que je dois vérifier que le fichier n'existe pas). Enfin, je vais y regarder...

 

je suis très limité en bash ! mais en ruby passer des arguments est très simple et tester un fichier se fait aussi simplement que cela :

```
fichier = FileTest::exist?('nom_du_fichier')
```

la variable fichier récupère une valeur true ou false que tu traites dans un if ou un case qui est plus puissant que tous autres langages http://www.projectomega.org/article.php?lg=fr&php=tuts_ruby04&p=1

Je sais que je ne t'ai pas beaucoup aidé là  avec mes insinuations  :Sad:   ... 

                                                                            @ +

----------

## loopx

Non en fait, mais tu m'as quand meme dit que le ftp veux toujours pas fonctionner chez toi   :Wink: 

Non, sérieux, ca me dépasse, peut etre faudrait'il le forcer en passive ou en ASCII (démarre peut etre en binaire chez toi alors que chez moi c'étais en ASCII). Ca me dépasse un peu comme un simple ftp peux foutre le kazaa...

Bon, de toute manière, il y aura bientot l'option sftp (si j'arrive...), la ca a intérret à fonctionner chez toi sinon, ca en devient triste  :Very Happy: 

----------

## man in the hill

 *loopx wrote:*   

> Non, sérieux, ca me dépasse, peut etre faudrait'il le forcer en passive ou en ASCII (démarre peut etre en binaire chez toi alors que chez moi c'étais en ASCII). Ca me dépasse un peu comme un simple ftp peux foutre le kazaa...

 

Il fonctionne en passive et en binaire chez moi ! je vais fouiller un peu plus dans les jours qui viennent   :Wink:  ...

@ +

----------

## loopx

 *man in the hill wrote:*   

>  *loopx wrote:*   Non, sérieux, ca me dépasse, peut etre faudrait'il le forcer en passive ou en ASCII (démarre peut etre en binaire chez toi alors que chez moi c'étais en ASCII). Ca me dépasse un peu comme un simple ftp peux foutre le kazaa... 
> 
> Il fonctionne en passive et en binaire chez moi ! je vais fouiller un peu plus dans les jours qui viennent   ...
> 
> @ +

 

Comment !? Mmmm, la commande ftp utilise apparement le mode binaire + actif pour la connexion, via le script ca semble plus etre du ASCII + actif?

Maintenant, tout dépend de tes configs de ton serveur ftp, le miens, il accepte tout, donc j'ai pas de permission denied mais ca fait un fichier corrompu (en ASCII).

Je vais le fixé en passive mode aussi alors  :Wink:  peut etre que c'est ca ton problème...

----------

## man in the hill

 *loopx wrote:*   

> je vais le fixé en passive mode aussi alors  peut etre que c'est ca ton problème...

 

Possible ! 

```

crazy_gentoo  %

 ftp amnesiac

Connected to amnesiac (192.168.26.1).

220 Welcome to Amnesiac FTP service.

Name (amnesiac:root): baki

530 Please login with USER and PASS.

SSL not available

331 Please specify the password.

Password:

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> ls

200 PORT command successful. Consider using PASV.

150 Here comes the directory listing.

drwxr-xr-x    2 1009     1007         4096 Jun 24 15:34 misc

drwxr-xr-x    2 1009     1007         4096 Jun 21 22:34 musik

drwxr-xr-x    2 1009     1007         4096 Jun 21 22:34 video

226 Directory send OK.

ftp> 

```

```
200 PORT command successful. Consider using PASV. = mode passif
```

                                        @ +

----------

## loopx

Personne ne connait une commande pour afficher la ligne X d'un fichier ???? Ce serais super utile, j'ai regarder quelque man mais ca dis pas grand chose d'intéressant...

----------

## PabOu

 *loopx wrote:*   

> Personne ne connait une commande pour afficher la ligne X d'un fichier ???? Ce serais super utile, j'ai regarder quelque man mais ca dis pas grand chose d'intéressant...

 

C'est peut-être pas la meilleure solution.. mais voilà :

head -n X fichier.txt | tail -n 1

----------

## titoucha

 *loopx wrote:*   

> 
> 
> Je sais pas comment gérer les arguments de mon script (pour que ca fonctionne en les mettants dans n'importe quel sens par exemple. Et aussi, comment peut on faire un NOT en bash, pour ce if : if [ -e fichier ]  (je dois faire un if/else au lieu d'un if seul, parce que je dois vérifier que le fichier n'existe pas). Enfin, je vais y regarder...
> 
> t

 

Pour le NOT : if [ ! -e fichier]

----------

## restecool

pour Magic Banana et loopx, le même en français   :Laughing: 

http://abs.traduc.org/abs-4.0-fr/abs-4.0-fr-html.tar.bz2

note:

vraiment cool ce script

----------

## Magic Banana

```
The requested URL /abs-4.0-fr/abs-4.0-fr-html.tar.bz2 was not found on this server.
```

Et puis il veut travailler son anglais le loopx.  :Very Happy: 

Sinon pour un traitement de fichier par ligne je pense que le mieux c'est d'utiliser sed (une horreur, les développeurs de vi s'en sont inspirés, c'est pour dire !  :Laughing:  )... Il y a quelques trucs intéressants à ce sujet dans l'archive que je t'ai donné (mais comme toi j'en suis à la phase découverte du Shell).

Remarque il y a peut-être moyen de faire ça sans l'artillererie lourde avec la commande cut...

La proposition de PabOu me paraît très lourde de calcul...

----------

## truc

```
sed 'k!d' file
```

 pour afficher la  k-ième ligne  :Wink: 

----------

## loopx

Mmm, ca m'a l'air pas mal tout ca  :Smile: 

Il va prendre un sale coup le script maintenant  :Very Happy: 

Je me demande aussi si je devrais intégrer les langues dans le script afin de n'avoir qu'un seul fichier à transferer .... Je sais pas si c'est une bonne idée. Mais si le fichier de langue n'existe plus, ben le script n'ira plus  :Surprised:   c'est mal quoi ...

----------

## man in the hill

 *loopx wrote:*   

> Mmm, ca m'a l'air pas mal tout ca 
> 
> Il va prendre un sale coup le script maintenant 
> 
> Je me demande aussi si je devrais intégrer les langues dans le script afin de n'avoir qu'un seul fichier à transferer .... Je sais pas si c'est une bonne idée. Mais si le fichier de langue n'existe plus, ben le script n'ira plus   c'est mal quoi ...

 

En même temps tu n'as pas 10000 langues à traduire, l'anglais et le français suffiront mais tu peux aussi le faire en indi  :Razz:   !

----------

## loopx

On peut faire plusieurs style aussi  :Wink: 

Ben, voilà, c'est traduit, c'est incorporé dans le script, mais j'ai juste un dernier souci:

J'avais des echo -n qui sont remplacé par des echo tout court. Je sais pas trop comment gérer ca.

En fait, a la place de ceci dans le script: echo -e -n blablablabla

J'ai maintenant juste un echo -e blablablabla

J'ai aucune idée de comment lui dire de ne pas revenir à la ligne. Peut etre un switch case maintenant que j'y pense. Je regarderai ca demain parce que ca m'a bien soulé ce soir  :Very Happy: 

Je posterai quand se sera plus joli  :Wink: 

Et je vais aussi incorporer une autogénération du fichier de langue  :Wink: 

----------

## man in the hill

 *loopx wrote:*   

> Et je vais aussi incorporer une autogénération du fichier de langue 

 

ça m'intéresse aussi !   :Wink: 

----------

## truc

 *loopx wrote:*   

> J'avais des echo -n qui sont remplacé par des echo tout court. Je sais pas trop comment gérer ca.
> 
> En fait, a la place de ceci dans le script: echo -e -n blablablabla
> 
> J'ai maintenant juste un echo -e blablablabla
> ...

 

euh quelqu'un m'explique pourquoi tu ne laisse pasecho -ne blablab ? ?

----------

## loopx

Parce que les 3/4 des messages doivent etre placé sur 1 ligne puis revenir à la ligne, ou alors rajouter un echo a la fin de l'appel à la fonction. Je préfère le switch case quand meme. Je vais pas tarder a continuer ca ...

----------

## loopx

Allais, voilà, c'est en francais !!! Meme si il faut que vous copiez encore le conf-language, je vais bientot le mettre dans le script mais je vais partir donc faudra encore attendre...

Il risque d'y avoir des problèmes, ce genre de ligne:

```

./config.sh: eval: line 46: unexpected EOF while looking for matching `''

./config.sh: eval: line 47: syntax error: unexpected end of file

```

C'est la gallère pour arriver a lire le fichier conf-language, il se plante sur un > ou un < ou encore, un ' .... enfin, c'est un peu la merde... Si il y a ce genre de ligne, probablement qu'il y a une faute dans le conf-language.

EDIT: Voilà, je suis arrivé à un gros problème. J'arrive pas a faire l'auto-generation du fichier conf-language. En fait, vu déjà la difficulté pour lire le fichier conf-language (trop de ", il se plante sur un > < ' etc...), ben pour arriver a écrire ce fichier, c'est carrément la gallère...

Personne n'aurais un moyen pour que un echo (ou une autre commande) permette de rajouter une ligne au fichier, et la ligne, il doit lui laisser les ", il doit pas placer le contenu de la variable (donc laisser un $PATH_SCRIPT par exemple), etc... J'ai encore mis à jour le script sur la première page, une nouvelle fonction generate_conf_language qui s'occupe de créer le fichier (le fichier doit ressembler exactement à ce qui est censé se trouver dans conf-language, c'est affiché juste en dessous du script). Moi je bloque, il faudrait soit simplifier la lecture du fichir (je veux dire, de manière à ce que je n'ai plus besoin de mettre des " " pour placer une ' par exemple), soit trouver "le" truc qui m'écrira exactement les lignes tel quel ...

Help please   :Laughing: 

EDIT2: hooo la boulette, jme suis planté de fichier la génération du fichier de langue, il a tout mis dans conf-list   :Rolling Eyes: 

----------

## man in the hill

 *man in the hill wrote:*   

>  *loopx wrote:*   Non, sérieux, ca me dépasse, peut etre faudrait'il le forcer en passive ou en ASCII (démarre peut etre en binaire chez toi alors que chez moi c'étais en ASCII). Ca me dépasse un peu comme un simple ftp peux foutre le kazaa... 
> 
> Il fonctionne en passive et en binaire chez moi ! je vais fouiller un peu plus dans les jours qui viennent   ...
> 
> @ +

 

Qu'est-ce que je suis con   :Embarassed:  , mes users n'ont pas le droit d'upload sur mon serveur ! 

C'est un warning à mettre en place !

je vais essayer ton script bientôt !

          @ +   :Wink: 

----------

## loopx

Bonjour, petit UP pour signaler que j'ai refais ce script, maintenant il est clair, facile à comprendre, en francais ...

Toute les nouvelles info se répercuterons directement sur la 1ère page de ce thread.

N'hésitez pas à me dire ce que vous en pensez ...

----------

## geekounet

```
#!/bin/bash 
```

Ok, je lis pas plus loin, c'est pas pour moi  :Laughing: 

Tiens j'ai toujours pas fini mon script de backup en zsh moi  :Rolling Eyes: 

----------

## loopx

t'es pas obligé de lire, tu peux juste l'exécuter   :Wink: 

----------

