Forum Programmation.shell Save automatique

Posté par  .
Étiquettes :
0
2
oct.
2005
Salut,

J'ai un petit script save:

#! /bin/bash

# This program is under GPL Licence
# save_config v0.3 by Wedge

VERSION="0.3"
PROGRAM=`basename $0`;
TMP="/tmp/save_config";
DATE=`date +%Y%m%d`;
ARCH=`uname -m`;

LIST_FILE="/etc/fstab /etc/inittab /etc/sudoers /etc/resolv.conf /etc/host* /etc/X11/xorg.conf /etc/rc.d/*.* /etc/swaret.conf /etc/ntp.conf
/etc/samba/*.*
$HOME/.bashrc $HOME/.bash_profile $HOME/.vimrc $HOME/.save $HOME/.traduc $HOME/tuxcards_vrac $HOME/.volume $HOME/.xinitrc
$HOME/.mozilla/firefox/*.* $HOME/.psi/*.* $HOME/.sylpheed/*.* $HOME/.mldonkey/*.* $HOME/.icons/*.* $HOME/.irssi/*.* $HOME/.pan/*.*
$HOME/.xmms/*.* $HOME/.applis/*.* $HOME/.boxjul/*.* $HOME/.fvwm/*.* ";

red="\e[1;31m";
green="\e[1;32m";
yellow="\e[1;33m";
blue="\e[1;34m";
cyan="\e[1;36m";
nc="\e[0m";

function usage()
{
echo -e "${nc}Usage: ${yellow}${PROGRAM}${nc} [-h|--help] [-l|--list] [-v|--version]";
}

function usage_long()
{
usage;
echo -e "\n Make sure to run this as ${red}root${nc} !"
echo -e " This program is here to save all your configuration files."
echo -e " This might be useful for paranoiac users or for thoses who, like me, are about to make lots of changes every time."
echo -e " Just run ${yellow}${0}${nc} and save the Slackware package it generates. Make your change."
echo -e " Does it get crashy ?"
echo -e " Then install the package and you'll be able to find your system exactly like before this damn ??*!% change ;^)."
echo -e " If you want to add new files to save, edit ${yellow}${0}${nc} and modify the ${green}LIST_FILE${nc} variable.\n"
echo -e " Options :"
echo -e " \t-h, --help :\tDisplay this help"
echo -e " \t-l, --list :\tDisplay the list of files to save"
echo -e " \t-v, --version :\tDisplay the version number\n"
}

function print_list()
{
for file in $LIST_FILE; do
dirname=`dirname $file`;
basename=`basename $file`;
echo -e " ${nc}${dirname}/${basename}"
done
}

function version()
{
echo -e "${PROGRAM} Version ${VERSION}\n"
}

function remove_temp_dir()
{
echo -ne "$nc Deleting temporary files and directories ...";
cd $HOME
rm -rf $TMP 2> /dev/null
if [ $? -eq 0 ]; then
echo -e "\t$green done $nc";
else
echo -e "\t$red failed $nc";
fi
}

function save()
{
echo -e "$nc Saving files to temporary save directories ..."
for file in $LIST_FILE; do
if [ -f $file ]; then
dirname=`dirname $file`;
basename=`basename $file`;
if [ ! -d "$TMP/$dirname" ]; then
mkdir -p "$TMP/$dirname";
if [ $? -eq 0 ]; then
echo -e "\t$nc Creating $dirname ...\t$green done $nc";
else
echo -e "\t$nc Creating $dirname ...\t$red failed $nc";
remove_temp_dir;
exit;
fi
fi
cp -p -d -f $file "$TMP/$dirname/$basename" 2> /dev/null;
if [ $? -eq 0 ]; then
echo -e "\t$nc Copying $file ...\t$green done $nc";
else
echo -e "\t$nc Copying $file ...\t$red failed $nc";
fi
else
echo -e "$nc $file :$red file doesn't exist ! $nc";
fi
done;
}


if [ $# -ge 1 ]; then
case $1 in
-l|--list)
print_list;
exit;;
-h|--help)
usage_long;
exit;;
-v|--version)
version;
exit;;
*)
usage;
exit;;
esac
fi

echo -ne "$nc Creating temporary save file directory ..."
mkdir -p $TMP
if [ $? -eq 0 ]; then
echo -e "\t$green done $nc";
else
echo -e "\t$red failed $nc";
exit;
fi

save;

echo -ne "$nc Creating Slackware package ...";
cd $TMP
mkdir -p "install"
echo -e "" > "install/slack-desc";
echo -e " |---handy-ruler----------------------------------------|" >> "install/slack-desc";
echo -e "save_config_slack: save_config" >> "install/slack-desc";
echo -e "" >> "install/slack-desc";
echo -e "save_config_slack: Configuration saved files" >> "install/slack-desc";
echo -e "save_config_slack: Date $DATE" >> "install/slack-desc";
echo -e "save_config_slack:" >> "install/slack-desc";
echo -e "save_config_slack:" >> "install/slack-desc";
echo -e "save_config_slack:" >> "install/slack-desc";
echo -e "save_config_slack:" >> "install/slack-desc";
echo -e "save_config_slack:" >> "install/slack-desc";
makepkg -l y -c n "save_config_slack-${DATE}-${ARCH}-1.tgz" 1> /dev/null 2>&1
if [ $? -eq 0 ]; then
echo -e "$cyan save_config_slack-${DATE}-${ARCH}-1.tgz\t$green done $nc";
else
echo -e "$cyan save_config_slack-${DATE}-${ARCH}-1.tgz\t$red failed $nc";
remove_temp_dir;
exit;
fi

echo -ne "$nc Moving created save package to $HOME ...";
mv "save_config_slack-${DATE}-${ARCH}-1.tgz" /mnt/fichier/os/
if [ $? -eq 0 ]; then
echo -e "\t$green done $nc";
else
echo -e "\t$red failed $nc";
fi

remove_temp_dir;

## CHANGELOG
# V0.1
# First release
#
# V0.2
# Added -l and -v options to script
#
# V0.3
# Corrected slack-desc bug

Le problème c'est qu'il ne copie pas les repertoire quand d'autre répertoire sont a l'intérieur, si ont peut me filer un coup de main.
  • # Re: Save automatique

    Posté par  . Évalué à 2.

    Le problème c'est qu'il ne copie pas les repertoire quand d'autre répertoire sont a l'intérieur, si ont peut me filer un coup de main.

    Il faut utiliser cp avec l'option -R :
    cp -p -d -f -R $file "$TMP/$dirname/$basename" 2> /dev/null;

    Tu peux aussi réduire les options (cf. page de manuel) :
    cp -af $file ...
    • [^] # Re: Save automatique

      Posté par  . Évalué à 1.

      Merci de ta réponse.

      J'ai esseyer avec -r -R mais j'obtient toujours la même chose:
      pti exemple:

      /home/jul/.mozilla/firefox/s2v8r1ur.default : file doesn't exist !
      Copying /home/jul/.mozilla/firefox/XUL.mfasl ... done
      /home/jul/.psi/*.* : file doesn't exist !

      Je capte pas trop la. Oui oui les repertoires existent ;)
      • [^] # Re: Save automatique

        Posté par  . Évalué à 2.

        C'est une usine à gaz ton script ;)
        1. comme l'a dit Hervé, commence par remplacer les *.* par des *
        2. tu réinventes la roue dans ta fonction save(). Tu peux faire la même chose avec tar :
        for file in $LIST_FILE; do tar -rf mon_backup.tar $file ; done
        gzip -9 mon_backup.tar
      • [^] # Re: Save automatique

        Posté par  . Évalué à 1.

        En fait, ta fonction save() se résume à ça :
        cp -a --parents $LIST_FILE $TMP
  • # Réflexe DOSien

    Posté par  . Évalué à 4.

    Evite déjà les *.*
    Tu as dû remarquer que sous GNU/Linux, les fichiers n'ont pas toujours d'extension. Un simple * suffit pour voir tous les fichiers et répertoires non cachés.
    • [^] # Re: Réflexe DOSien

      Posté par  . Évalué à 1.

      Le script n'est pas de moi, je n'ai presque pas de connaisance en scripting je ne sais plus ou je l'ai trouver. C'est clair que l'on peut faire plus simple.
      J'ai esseyer d'enlever les *

      Pti exemple:

      .fvwm/* : file doesn't exist !

      Si j'aime bien se petit script c'est qu'il renvoie se qui à été copier ou non, fonction superficielle certe, mais quand j'aurais une masse de fichier se serait plus simple
  • # man rsync

    Posté par  (site web personnel) . Évalué à 1.

    echo "/usr/bin/rsync -aH -z --stats --delete -e ssh --exclude-from=/home/dhp/.conf/rsync.exclude /home/dhp/ saturn.doublehp.org:/mnt/big/dhp/dhp 2>&1" >> crontab

    (avec les dates qui vont bien).

    manpage reporte aussi:

    --exclude=PATTERN exclude files matching PATTERN
    --exclude-from=FILE read exclude patterns from FILE
    --include=PATTERN don't exclude files matching PATTERN
    --include-from=FILE read include patterns from FILE
    --files-from=FILE read list of source-file names from FILE
    -0, --from0 all *from/filter files are delimited by 0s
    • [^] # Si sa sert

      Posté par  . Évalué à 1.

      #!/bin/sh
      DATE=`date +%Y%m%d`;
      red="\e[1;31m";
      green="\e[1;32m";
      yellow="\e[1;33m";
      blue="\e[1;34m";
      cyan="\e[1;36m";
      nc="\e[0m";

      for file in /home/jul /etc/fstab /root /etc/mtab /etc/inittab /etc/sudoers /etc/resolv.conf /etc/host* /etc/X11/xorg.conf /etc/rc.d/ /etc/swaret.conf /etc/ntp.conf; do tar -rf save_slack${DATE}.tar $file ; done
      #gzip -9 save_slack$.tar

      echo -ne "$nc Moving created save package to mnt/fichier/os/save";
      mv "save_slack${DATE}.tar" /mnt/fichier/os/save
      if [ $? -eq 0 ]; then
      echo -e "\t$blue Fait $nc";
      else
      echo -e "\t$red Erreur $nc";
      fi

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.