Archiver uniquement si les fichiers non identiques

Fermé
Synerz Messages postés 1221 Date d'inscription mercredi 5 juin 2013 Statut Membre Dernière intervention 27 décembre 2017 - Modifié par mamiemando le 29/09/2016 à 10:28
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 29 sept. 2016 à 10:27
Bonjour,

J'aimerai savoir si il est possible d'archiver et compresser des dossiers uniquement si ils ne sont pas identiques à l'ancien archivage que j'ai fais.
En gros je veux faire ça :

-Tester si un argument est présent sur la ligne de commande. Si cet argument n'est pas présent, archiver tout le homedir.
-Si un argument est présent, tester si c'est le nom d'un répertoire. Si oui, archiver ce répertoire. Si non, afficher un message d'erreur et terminer le script.
-Dans le cas de l'archivage du homedir entier, exclure les dossiers et fichiers non désirables, comme le dossier ~/.cache/, grâce à l'option --exclude de l'outil TAR.
-Afin de conserver plusieurs archives successives d'un même répertoire, on souhaite que le nom de l'archive créée contienne la date de création de l'archive. Pour cela, utiliser dans votre script la commande date avec l'option -I et des backquotes.
-Dans votre script, avant la création de l'archive, positionner la variable d'environnement qui va permettre d'obtenir la meilleure compression possible avec le logiciel de compression que vous avez choisi
Voila mon code :
#!/bin/bash

if [ -d "/media/jean/0226-B01E/" ] 
then
echo "La clé USB est branchée !"
#Choix des dossiers à archiver et compreser
cd /home/jean/
tar Jcf homedir.tar.xz Téléchargements/ Musique/ Documents/
#Premiere vérification
check=$(md5sum homedir.tar.xz)

#Copie de l'archive vers la clé USB
cp /home/jean/homedir.tar.xz /media/jean/0226-B01E/
rm /home/jean/homedir.tar.xz
#Vérification des fichiers
cd /media/jean/0226-B01E/
check1=$(md5sum homedir.tar.xz)
 if  [ "$check" == "$check1" ] 
 then
  echo "Le fichier a été verifié"
 else 
  echo "Erreur dans le fichier"
 fi
else 
 echo "La clé USB n'est pas branchée !" 
 exit
fi



J'avoue que c'est pour des cours mais je ne veux pas la réponse je veux juste des indications pour avancer.

Merci d'avance :)
A voir également:

1 réponse

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
Modifié par mamiemando le 29/09/2016 à 10:27
Bonjour,

Disons qu'en vrai, il me paraît beaucoup plus simple et beaucoup plus adapté d'utiliser
git
. Rien à coder, tu auras possibilité de gérer les différentes versions etc, etc.

Ensuite pour répondre à ta question avec ta méthode :
- tu peux lister le contenu d'une archive avec
tar
:
https://www.cyberciti.biz/faq/list-the-contents-of-a-tar-or-targz-file/
- tu peux comparer les données stockées dans deux arborescences avec
diff
(c'est ce que fait
git
)
- tu ne peux pas vraiment hardcoder le chemin du point de montage, ou même le device dans ton script, car il dépend de ton système. Ça devrait plutôt être un paramètre de ton algorithme, quitte à piocher des valeurs par défaut dans un fichier de configuration (et l'appeler par exemple /home/toto/.applicationrc) s'il existe.

Bonne chance
0