#1 Le 20/05/2016, à 10:29
- Maevrynn
[RESOLU]Script de copie de dossier pour NAS
Bonjour à tous et à toutes,
Je suis tout nouveau sur le forum et ceci est mon premier message.
Mon niveau en shell script bash est égal à débutant avancé ^.^
Cela fait un bon moment que je suis sur un script qui à pour but de:
Copier un dossier et tout son contenu dans un autre dossier, le renommer en la date du jour.
Tous les premiers du mois dans un dossier qui se nommera Mensuel,
et tous les 08, 15, 22 du mois dans un dossier qui se nommera Hebdomadaire.
Ensuite, dans le dossier Mensuel, il effacera tous les dossier plus vieux de 4 mois (on est en Mai, il efface janvier, ect)
Et dans le dossier Hebdo, Il efface le mois précédant (quand il copie 2016-07-08, il efface donc 2016-06-08)
En espérant que c'est clair, voici mon script en l'état actuel (il risque de faire saigner les yeux de certains)
#!/bin/bash
############
#Script de copie de fichiers pour un NAS
#20.05.2016
############
#Constantes
REP_SOURCE="Mondossier"
REP_DESTINATION_MENSUEL="Dossier1"
REP_DESTINATION_HEBDO="Dossier2"
#Variables
Rename="date +%Y-%m-%d" #Permettra de renommer le dossier avec la date du jour
LeJour=$(date "+%d") #Récupère le jour pour le choix du dossier de destination
LeMois=$(date "+%m") #Récupère le mois pour variable suivante
UnMois=$((LeMois-01)) #Condition de suppression de dossier plus vieux d'un mois
QuatreMois=$((LeMois-04)) #Condition de suppression de dossier plus vieux de quatre mois
if [ "$LeJour" = "01" ] ; then
DirMens="2016-0$QuatreMois-$LeJour" #Bricolage honteux qui fonctionne (jusquà un certain point...)
cp -r $REP_SOURCE $REP_DESTINATION_MENSUEL/`$Rename`
echo "Copie dans Dossier1"
cd /home/maevrynn/Bureau/Dossier1
rm -rf $DirMens #Supprime le dossier plus vieux de quatre mois
elif [ "$LeJour" = "08" ] || [ "$LeJour" = "15" ] || [ "$LeJour" = "22" ] ; then
DirHebdo="2016-0$UnMois-$LeJour" #même bricolage ilogique
cp -r $REP_SOURCE $REP_DESTINATION_HEBDO/`$Rename`
echo "Copie dans Dossier2"
cd /home/maevrynn/Bureau/Dossier2
rm -rf $DirHebdo #supprime le dossier plus vieux d'un mois
fi
Il s'agit là d'un script de test et le mettrai au propre avec les valeurs de la donnée une fois fini
Ce script fonctionne, mais ne fonctionne pas. Je m’explique:
En ce qui concerne la suppression des vieux dossier, ma variable ((LeMois-1)) me sort un seul digit, du coup j'ai bricoler un 0.
ça ça va fonctionner uniquement sur les mois ayant 0 comme premier digit: 01, 02, 03...
et ce qui ne fonctionnera pas c'est: ok, on est en janvier donc le moi précédant c'est décembre, de l'année précédente... attends, attends je trouve pas...
Je tiens à préciser que je cherche à faire le plus simple possible.
Voilà, j'éspère ne pas être hors sujet (lieu sur le forum)
Merci à toutes celles et ceux qui me donnerons un coup de main, un indice et reste à disposition pour tout complément d'information.
Je continue mes recherche, en attendant:
Bien à vous,
Maevrynn
Dernière modification par Maevrynn (Le 20/05/2016, à 21:38)
Hors ligne
#2 Le 20/05/2016, à 11:36
- pingouinux
Re : [RESOLU]Script de copie de dossier pour NAS
Bonjour,
UnMois=$(printf "%02d" $((LeMois-01)))
Ajouté :
Ou plus simple
printf -v UnMois "%02d" $((LeMois-01))
Dernière modification par pingouinux (Le 20/05/2016, à 11:41)
Hors ligne
#3 Le 20/05/2016, à 12:09
- Maevrynn
Re : [RESOLU]Script de copie de dossier pour NAS
Merci,
J'ai testé et ça a un meilleur résultat que mon "collage" !
Hors ligne
#4 Le 20/05/2016, à 13:25
- pingouinux
Re : [RESOLU]Script de copie de dossier pour NAS
Pour avoir le mois précédent de la date du jour
$ date +"%m" -d "last month"
04
et d'une date quelconque
$ date +"%m" -d "2015-01-25 last month"
12
Hors ligne
#5 Le 20/05/2016, à 21:35
- Maevrynn
Re : [RESOLU]Script de copie de dossier pour NAS
Merci, grâce à ces lignes j'ai réussi à faire ce que je voulais:
#!/bin/bash
############
#Script de copie de fichiers pour un NAS
#20.05.2016
############
#Constantes
REP_SOURCE="Mondossier"
REP_DESTINATION_MENSUEL="Dossier1"
REP_DESTINATION_HEBDO="Dossier2"
#Variables
StrDate=$(date "+%Y-%m-%d") #Permettra de renommer le dossier avec la date du jour
LeJour=$(date "+%d") #Récupère le jour pour le choix du dossier de destination
if [ $LeJour = "01" ] ; then
cp -r $REP_SOURCE $REP_DESTINATION_MENSUEL/`$StrDate`
echo "Copie dans Mensuel"
QuatreMoisAvant=$(date "+%Y-%m-%d" -d "4 month ago")
cd /home/maevrynn/Bureau/Dossier1
rm -rf $QuatreMoisAvant #Supprime le dossier plus vieux de quatre mois
elif [ $LeJour = "08" ] || [ $LeJour = "15" ] || [ $LeJour = "22" ] ; then
cp -r $REP_SOURCE $REP_DESTINATION_HEBDO/`$RenameDate`
echo "Copie dans Hebdo"
UnMoisAvant=$(date "+%Y-%m-%d" -d "1 month ago")
cd /home/maevrynn/Bureau/Dossier2
rm -rf $UnMoisAvant #supprime le dossier plus vieux d'un mois
fi
Hors ligne
#6 Le 20/05/2016, à 22:04
- pingouinux
Re : [RESOLU]Script de copie de dossier pour NAS
Attention :
RenameDate n'est pas défini, et cette ligne
cp -r $REP_SOURCE $REP_DESTINATION_MENSUEL/`$StrDate`
doit être remplacée par celle-ci
cp -r $REP_SOURCE $REP_DESTINATION_MENSUEL/"$StrDate"
Hors ligne
#7 Le 21/05/2016, à 07:35
- credenhill
Re : [RESOLU]Script de copie de dossier pour NAS
hello
ou la date sans 0
$ date +%-m
5
$ date +%-m -d '1 month ago'
4
Hors ligne
#8 Le 21/05/2016, à 13:47
- Maevrynn
Re : [RESOLU]Script de copie de dossier pour NAS
@Pingouinux
Ha oui, erreur de copie, Merci.
Je changerai ça quand je mettrai au propre avec les bon dossiers.
Hors ligne