Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/05/2016, à 11: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 smile
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, à 22:38)

Hors ligne

#2 Le 20/05/2016, à 12: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, à 12:41)

Hors ligne

#3 Le 20/05/2016, à 13: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, à 14: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, à 22: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, à 23: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, à 08: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, à 14: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