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 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 yikes

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. cool

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 smile

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 smile )

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 tongue, 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 sad

"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

Partie de l'énoncé en #8 a écrit :

=> 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  neutral

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 big_smile ).
- 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