#1 Le 19/10/2013, à 12:23
- Dany007
Résolu - Problème avec sauvegarde de fichier
Bonjour
J'ai un petit problème avec une copie de sauvegarde d'un répertoire passé en argument. Pourriez-vous m'aider s'il vous plait ?
Enoncé : Créer un script faisant une copie de sauvegarde d’un répertoire passé en argument. Vérifier que le répertoire existe bien, sinon afficher un message d’erreur. Le script doit copier les fichiers dans un répertoire dont le nom sera répertoiresav ‘yymmdd’ (ex : sav121006).Pour chaque fichier copié, créer une ligne dans un fichier liste avec le nom du fichier copié avec une première ligne « sauvegarde du date du répertoire répertoire ».
=========================================================
Voici mon script:
if [ ! -d $1 ] ; then
echo "Le répertoire n'existe pas"
else
cp -R $1/ $1sav `date "+%y%m%d"`
touch Liste
echo "Sauvegarde du `date "+%d-%m-%Y"` du répertoire $1" >> Liste
fi
============================================================
Lorsque je lance la commande, il me créer bien le file ‘Liste’ dans le répertoire /home/dany/LASTSCRIPTBEFOREEXAMN/LINUX/TP3/EXO6 mais m’affiche également ce message d’erreur:
cp: target `131019' is not a directory
Et le contenu du fichier 'file' indique : Sauvergarde du 19-10-2012 du répertoire
==> Je ne comprends pas pourquoi il n’affiche rien après répertoire (alors que l’argument est $1 dans le script).
Pourriez-vous m'aider s'il vous plait ?
D'avance, merci de votre aide.
Cdt,
Dany
Dernière modification par Dany007 (Le 19/10/2013, à 20:14)
Hors ligne
#2 Le 19/10/2013, à 13:45
- pingouinux
Re : Résolu - Problème avec sauvegarde de fichier
Re-bonjour,
As-tu appelé ton script ainsi ?
./ton_script nom_du_répertoire_à_sauvegarder
Remarques :
Utiliser "$1" et non $1
Il faut créer le répertoire de sauvegarde, et le cp est erroné (un espace qui traîne)
cp -R $1/ $1sav `date "+%y%m%d"`
est à remplacer par
dat=$(date "+%y%m%d") rep="$1"sav$dat mkdir "$rep" cp -R "$1" "$rep"
La commande touch est inutile ici
On te demande d'écrire la liste des fichiers copiés dans Liste. Peut-être que l'exercice consiste à copier les fichiers un à un, et à en écrire le nom au fur et à mesure dans Liste.
Si c'est le cas, faut-il parcourir aussi les sous-répertoires de celui à sauvegarder ? Pour une copie fichier par fichier, ce serait plus compliqué.
Hors ligne
#3 Le 19/10/2013, à 18:54
- Dany007
Re : Résolu - Problème avec sauvegarde de fichier
Merci pour ton aide
Bon, j'ai bien remplacer la partie du script (cp -R $1/ $1sav `date "+%y%m%d"`) par ce que tu as écris.
==> Je crée le répertoire 'reptest' et lance la commande "./exo6bis reptest" (cad ./ton_script nom_du_répertoire_à_sauvegarder).
Résultat: un nouveau répertoire intitulé 'reptestsav131019' se crée et le répertoire 'reptest' se trouve à l'intérieur.
Ce qui indique que la sauvegarde du répertoire à l'intérieur d'un nouveau répertoire fonctionne bien.
==> C'est bizarre, d'abord on parle de 'copie de sauvegarde d'un répertoire', ensuite on dit que le script doit 'copier les fichiers dans un répertoire' et enfin : 'pour chaque fichier copié'... Personnellement je pense qu'il faut uniquement copié des répertoire (mais récursivement) dans le répertoire de sauvegarde.
Enfin, puisque l'énoncé indique que "Pour chaque fichier copié, créer une ligne dans un fichier 'liste' avec le nom du fichier copié..."
Par conséquent, la commande TOUCH doit exister afin de créer un fichier texte où seront répertoriés la liste des fichiers sauvegardés, non ?
Par conséquent, j'ai rajouté la ligne
touch Liste
echo "Sauvegarde du `date "+%d-%m-%Y"` du répertoire $1" >> Liste
Ce qui nous donne donc le script suivant:
=======================================================
if [ ! -d $1 ] ; then
echo "Le répertoire n'existe pas"
else
dat=$(date "+%y%m%d")
rep="$1"sav$dat
mkdir "$rep"
cp -R "$1" "$rep"
touch Liste
echo "Sauvegarde du `date "+%d-%m-%Y"` du répertoire $1" >> Liste
fi
=============================================================
Enfin, pourrais-tu me dire où se trouve l'espace qui traîne dans mon premier script : cp -R $1/ $1sav `date "+%y%m%d"`
Merci
Hors ligne
#4 Le 19/10/2013, à 19:00
- Dany007
Re : Résolu - Problème avec sauvegarde de fichier
Pourrais-tu également m'expliquer les 2 lignes ci-dessous (commentaires en face des lignes ) stp ?
dat=$(date "+%y%m%d")
rep="$1"sav$dat
Hors ligne
#5 Le 19/10/2013, à 21:26
- pingouinux
Re : Résolu - Problème avec sauvegarde de fichier
Par conséquent, la commande TOUCH doit exister afin de créer un fichier texte où seront répertoriés la liste des fichiers sauvegardés, non ?
Je te confirme que cette commande est inutile ici.
touch mon_fichier met à jour la date de modification de mon_fichier, et le crée s'il n'existe pas
commande >>mon_fichier fait la même chose
Enfin, pourrais-tu me dire où se trouve l'espace qui traîne dans mon premier script :
cp -R $1/ $1sav `date "+%y%m%d"`
^
|
Pourrais-tu également m'expliquer les 2 lignes ci-dessous (commentaires en face des lignes ) stp ?
dat=$(date "+%y%m%d")
rep="$1"sav$dat
dat=$(date "+%y%m%d") # Équivalent à dat=`date +"%y%m%d"` qui est obsolète
rep="$1"sav$dat # La variable rep est initialisée à reptestsav131019 ($1 et $dat sont remplacés par leur valeur)
PS : Si tu as des doutes sur les conseils que l'on te donne (une erreur est toujours possible), le mieux est d'expérimenter par toi-même. C'est une bonne méthode pour maîtriser les commandes.
Hors ligne
#6 Le 19/10/2013, à 21:33
- Dany007
Re : Résolu - Problème avec sauvegarde de fichier
C parfait.
Non, je n'ai pas de doute, j'essaie juste d'apprendre à nager
J'ai une autre question et je me demande si tu es disponible pour y jeter un œil (c'est quand même samedi soir )
Hors ligne
#7 Le 19/10/2013, à 21:38
- pingouinux
Re : Résolu - Problème avec sauvegarde de fichier
Tu peux y aller, je suis multi-tâche , et je ne réponds que lorsque je suis disponible.
Hors ligne
#8 Le 19/10/2013, à 22:01
- Dany007
Re : Résolu - Problème avec sauvegarde de fichier
Bon, je continue ici.
Là, je m'attaque à mon dernier exercice dont voici l'énoncé:
On veut créer un script qui puisse se lancer de cette façon sur le répertoire : envoi.sh adaptation-Système adsys.pdf
=> Le premier paramètre correspond à un titre et le second à un fichier.
Donc: $1: adaptation-système et $2: adsys.pdf
Ensuite, l'énoncé explique que ce script devra faire les opérations suivantes:
- Vérifier que le script accepte 2 paramètres
- Vérifier qu'il existe bien un fichier 'adsys.pdf' et qu'il n'est pas vide
- Vérifier qu'il existe bien un fichier 'lpsilmetzwce.xml' dans le répertoire ~/wce et qu'il n'est pas vide.
Ma question est alors la suivante: le répertoire 'adaptation-système' qui doit exister ou pas ?
C'est-à-dire que je ne sais pas si je dois imaginer cette configuration:
1. Le script intitulé 'envoi.sh'
2. Un répertoire intitulé 'adaptation-Système' avec le fichier 'adsys.pdf' dedans (car ==> envoi.sh adaptation-Système adsys.pdf)
3. Un répertoire intitulé 'WCE' avec le fichier 'lpsilmetzwce.xml' dedans
Ou bien celle-ci
1. Le script intitulé 'envoi.sh'
2. Un fichier 'adsys.pdf' (ici le fichier 'adsys.pdf' ne peut plus se lancer depuis cette commende ==> envoi.sh adaptation-Système adsys.pdf)
3. Un répertoire intitulé 'WCE' avec le fichier 'lpsilmetzwce.xml' dedans
Qu'en penses-tu ?
Hors ligne
#9 Le 19/10/2013, à 22:29
- pingouinux
Re : Résolu - Problème avec sauvegarde de fichier
adaptation-Système est un titre, non un répertoire. Tu vérifies que adsys.pdf est un fichier non vide du répertoire courant. Si le titre contient des espaces et/ou si le fichier se trouve ailleurs, tu appelles le script ainsi :
envoi.sh "adaptation-Système qui est un joli titre" /chemin_de_mon_fichier/adsys.pdf
Hors ligne
#10 Le 19/10/2013, à 22:43
- Dany007
Re : Résolu - Problème avec sauvegarde de fichier
Désolé, mais je ne comprends pas
"adaptation-Système est un titre, non un répertoire": qu'est-ce qu'un titre ?
CAS 1
==> Je veux dire, si j'écris : ./envoi.sh adaptation-Système adsys.pdf, je dois alors lire :
J'exécute le script 'envoi.sh' et je vais dans le titre 'adaptation-Système' pour voir si le fichier 'adsys.pdf' existe.
CAS 2
Ou bien, je me trompe complétement et je dois comprendre que le répertoire courant comporte 3 choses, à savoir:
1. Le script (envoi.sh)
2. Le fichier (adsys.pdf)
3. Le répertoire WCE qui contient le fichier 'lpsilmetzwce.xml'
Peux-tu me dire si c'est le CAS 1 ou le CAS 2 ?
Dernière modification par Dany007 (Le 19/10/2013, à 22:43)
Hors ligne
#11 Le 20/10/2013, à 06:30
- pingouinux
Re : Résolu - Problème avec sauvegarde de fichier
=> Le premier paramètre correspond à un titre et le second à un fichier.
.............................................
- Vérifier qu'il existe bien un fichier 'lpsilmetzwce.xml' dans le répertoire ~/wce et qu'il n'est pas vide.
"adaptation-Système est un titre, non un répertoire": qu'est-ce qu'un titre ?
Je suppose que c'est le titre du document adsys.pdf. C'est du moins comme ça que j'ai compris l'énoncé.
Peux-tu me dire si c'est le CAS 1 ou le CAS 2 ?
Plutôt le CAS 2, mais wce est dans ~ qui n'est pas forcément le répertoire courant. Il faut donc que tu vérifies que ~/wce/lpsilmetzwce.xml est un fichier non vide.
Pour tester que mon_fichier existe et est non vide :
if [ -f mon_fichier -a -s mon_fichier ] ...
(-a = opérateur logique ET). Voir man test.
Hors ligne
#12 Le 20/10/2013, à 09:53
- Dany007
Re : Résolu - Problème avec sauvegarde de fichier
Merci.
"Je suppose que c'est le titre du document adsys.pdf. C'est du moins comme ça que j'ai compris l'énoncé."
==> Non, j'ai un document PDF s'intitulant 'adsys.pdf'. Rien s'intitulant "Adaptation-Système".
"Plutôt le CAS 2, mais wce est dans ~ qui n'est pas forcément le répertoire courant. "
=> Est-ce que ~ veut dire que ce répertoire est dans home ou root ?
Réponse:
=> Si ce n'est pas un répertoire courant, est-ce que cela peut-il un répertoire caché ?
Réponse:
==> Je vais essayer de trouver et de vérifier que ~/wce/lpsilmetzwce.xml est un fichier non vide.
Dernière modification par Dany007 (Le 20/10/2013, à 09:55)
Hors ligne
#13 Le 20/10/2013, à 14:56
- pingouinux
Re : Résolu - Problème avec sauvegarde de fichier
==> Non, j'ai un document PDF s'intitulant 'adsys.pdf'. Rien s'intitulant "Adaptation-Système".
Considère alors adaptation-Système comme une chaîne de caractères que tu peux récupérer dans ton script par "$1".
=> Est-ce que ~ veut dire que ce répertoire est dans home ou root ?
=> Si ce n'est pas un répertoire courant, est-ce que cela peut-il un répertoire caché ?
~ est ton home (généralement /home/ton_nom), et n'est évidemment pas un répertoire caché.
Le répertoire courant est celui dans lequel tu te trouves. La commande pwd permet de le connaître.
Hors ligne
#14 Le 20/10/2013, à 21:13
- Dany007
Re : Résolu - Problème avec sauvegarde de fichier
Re-bonjour
Merci pour tes explications.
Bon, j'ai commencé mon script (pas tout à fait fini) mais il me retourne déjà un truc que je ne comprends pas très bien. Pourrais-tu y jeter un œil ?
Avant de le poster, pourrais-tu me dire comment je fais pour afficher des images dans le post stp ?
Merci
Dernière modification par Dany007 (Le 20/10/2013, à 21:14)
Hors ligne
#15 Le 20/10/2013, à 22:02
- Dany007
Re : Résolu - Problème avec sauvegarde de fichier
Re
Je crois que j'ai trouvé..mais que je patauge encore
Voici donc la construction de mon arborescence (le script 'exo11' n'est pas utilisé et j'utilise le script 'exo11bis').
De plus, le fichier 'adsys.pdf' se trouve dans le répertoire AS et le fichier 'lpsilmetzwce.xml' se trouve dans le répertoire WCE.
==> http://imagik.fr/view/53719
Voici mon script
==> http://imagik.fr/view/53729
Et voici mes messages d'erreurs
==> http://imagik.fr/view/53730
C'est-à-dire que, dans les deux cas, il m'indique 2 fichiers (et pas un seul comme je le demande suivant le répertoire que j'emploie).
Peux-tu me dire ce que je fais de mal stp ?
Merci
Hors ligne
#16 Le 21/10/2013, à 15:26
- Dany007
Re : Résolu - Problème avec sauvegarde de fichier
Hello
Le problème est résolut car j'ai vu ma prof ce matin.
Elle m'a expliquée que :
- Je mélange les variables avec les commandes en ligne ($1 et le nom des dossiers). Cad que je pense que si je mets "./exo11 AS adsys" le PC ne va pas comprendre AS mais $1 (tandis que moi, je comprenais AS ).
- Je dois indiquer le chemin du fichier .xml dans la condition, pas dans une autre (je peux également mettre /$fichier à la place du chemin absolu + $fichier.
- Que je dois mettre le nom des variables et pas celui des fichiers.
Si tu vois encore autre chose que je fais mal, n'hésites pas à me le dire.
Merci pour ton aide.
A+
Hors ligne