Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
773 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Vérifier présence fichier dans 1 répertoire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Vérifier présence fichier dans 1 répertoire

n°1772803
alandon
Posté le 13-08-2008 à 11:04:51  profilanswer
 

Bonjour,
Je souhaiterais faire un petit shell qui me permettrait de détecter automatiquement l'édition, l'ajout ou la suppression d'un ou des fichiers présents dans un répertoire.
Je voudrais que le script me récapitule et m'envoie toutes ces informations dans un mail dès qu'il y a du nouveau dans ce répertoire.
Le shell doit donc tourner en boucle ?
 
N'ayant pas de notions en programmations, pourriez-vous me donnez quelques pistes pour faire ce shell .
 
Merci

Message cité 1 fois
Message édité par alandon le 28-08-2008 à 20:12:11
mood
Publicité
Posté le 13-08-2008 à 11:04:51  profilanswer
 

n°1772815
donny3
Posté le 13-08-2008 à 11:32:38  profilanswer
 

pour la suppression j'ai trouver ceci
 
sed '$d' mon_fichier.txt
 
mais le truc c'est que quand j'ouvre mon fichier j'ai toujours les 3 lignes
 

n°1772873
h4rold
Posté le 13-08-2008 à 14:05:18  profilanswer
 

alandon a écrit :

Bonjour,
Je souhaiterais faire un petit batch qui me permettrait de détecter automatiquement l'édition, l'ajout ou la suppression d'un ou des fichiers présents dans un répertoire.
Je voudrais que le batch me récapitule et m'envoie toutes ces informations dans un mail dès qu'il y a du nouveau dans ce répertoire.
Le batch doit donc tourner en boucle ?
 
N'ayant pas de notions en programmations, pourriez-vous me donnez quelques pistes pour faire ce batch.
 
Merci


 
Bah a moin de modif ton linux je ne voit pas comment tu peux te passer de boucle.
Et les boucles en Bash c'est vraiment moche. Tu doit absolument le faire en Bash ?  
Pour le faire de manière propre faudrait le faire en C++ mais ca ne seras pas simple.
 
Sinon il y a une autre méthode. Doit tu absolument connaître en temps réel ces modifications ou 1 mn après ca peux être bien ? Si ca peux correspondre un petit script bash et un cron toute les mn devrait faire l'affaire. (en gros ton script serait executé toute les minutes)

Message cité 1 fois
Message édité par h4rold le 13-08-2008 à 14:07:06
n°1772999
alandon
Posté le 13-08-2008 à 19:19:15  profilanswer
 

Merci d'avoir répondu.
Ce n'est pas du temps réel donc 1mn après c'est parfait.
L'idée du cron me plait bien.
Ce qui me pause le plus de problème c'est que j'ai aucune notions en bash.

n°1773003
h4rold
Posté le 13-08-2008 à 19:34:50  profilanswer
 

Heu la on va pas te coder ton script, il faut que tu trouve des tutos sur le net :)

n°1773005
alandon
Posté le 13-08-2008 à 19:43:20  profilanswer
 

sniff...
mé euh

n°1773131
Sve@r
Posté le 14-08-2008 à 09:39:14  profilanswer
 

alandon a écrit :

Ce qui me pause le plus de problème c'est que j'ai aucune notions en bash.


http://fr.lang.free.fr/cours/Shell_v2.0.pdf
 
C'est vrai que l'idée "script qui fait le traitement une fois" + "j'intègre le script dans un cron qui me le lance tous les "x" temps" est plus sympa que l'idée de "script qui tourne en boucle et qui va me charger mon système inutilement". Te faudra donc
1) créer ton script et le tester
2) intégrer ton script dans le cron
 
Et fais attention à tes termes. Dans ton premier post du parles de batch. Même si ce terme (issu de "batch processing" ) correspond à ton problème, il est généralement synonyme de script windows (parce que l'extension d'un tel script sous windows est ".bat" ). En lisant ton premier post j'ai d'abord cru que tu cherchais à faire un script windows. C'est pas de ta faute car ce terme "batch" devrait être global à tous les programmeurs mais malheureusement il est maintenant tombé du coté de windows. Faut le savoir...
 

h4rold a écrit :

Bah a moin de modif ton linux je ne voit pas comment tu peux te passer de boucle.
Et les boucles en Bash c'est vraiment moche. Tu doit absolument le faire en Bash ?  
Pour le faire de manière propre faudrait le faire en C++ mais ca ne seras pas simple.


D'abord il n'y a rien de moche à faire une boucle en bash. Par ailleurs je peux très bien te faire un compteur de 1 à n en bash absolument sans faire de boucle (et bien entendu n non connu à l'avance) et enfin il n'y a pas que le C++ pour être propre (t'as aussi C, Perl, Python, Ruby) mais le bash est quand-même l'outil le plus approprié pour un travail d'administration/surveillance comme c'est le cas ici. Mais tout dépend bien sûr de ce qu'on appelle "propre"...


Message édité par Sve@r le 14-08-2008 à 09:57:56

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1779406
alandon
Posté le 28-08-2008 à 19:33:15  profilanswer
 

Je reviens à la charge parce que j'ai bossé dessus et donc j'ai des questions pour vous.
L'objectif a légèrement changé, je veux pouvoir détecter la présence de nouveau fichiers dans un répertoire, si fichier existe, on copie la liste des fichiers dans un .txt.
Ensuite on envoie cette liste de fichiers qui se trouvent dans le txt par mail à mon adresse.
Et au final, on bouge les fichiers dans un autre répertoire.
 
Voilà ce que ça donne:
 

Code :
  1. newdate()
  2. {
  3. date # Affichage de la date
  4. }
  5. newcut()
  6. {
  7. cut -d" " -f1,2,3,4,5 /home/alandon/Desktop/lololiste.txt
  8. }
  9. if ! [ $? -ne 0 ]
  10. then
  11. newdate
  12. #newcut
  13. ls -lt /home/alandon/Desktop/essaiscript/ > /home/alandon/Desktop/lololiste.txt
  14. cut -d" " -f8,9 /home/alandon/Desktop/lololiste.txt > /home/alandon/Desktop/lololiste2.txt | mail -s "De nouveaux fichiers sont arrivés, voici leurs noms" adress@fai
  15. for i in /home/alandon/Desktop/essaiscript/*
  16.   do
  17.         mv $i //home/alandon/Desktop/essaiscriptsav/$j
  18.   done
  19. exit 1
  20. fi


 
 
J'aurais besoin d'aide, parce que j'ai fais un script avec d'autres bouts de codes que j'ai trouvé mais je ne comprend pas toutes les lignes exemple:  
celle ci:

Code :
  1. cut -d" " -f8,9 /home/alandon/Desktop/lololiste.txt > /home/alandon/Desktop/lololiste2.txt |...


 
 
Son effet est bien celui que j'attendais, à savoir qu'au début j'avais ça:

Code :
  1. -rw-r--r-- 1 root root    0 2008-08-28 14:44 lolo1
  2. -rw-r--r-- 1 root root    0 2008-08-28 14:44 lolo2
  3. -rw-r--r-- 1 root root    0 2008-08-28 14:44 lolo3
  4. -rw-r--r-- 1 root root    0 2008-08-28 14:44 lolo4


 
et maintenant j'obtiens ceci:

Code :
  1. lolo1
  2. lolo2
  3. lolo3
  4. lolo4


 
et
à celle-là y'a une erreur dans le code, je suis quasi sûr, mais ça marche:
 

Code :
  1. mv $i //home/alandon/Desktop/essaiscriptsav/$j


 
 
le problème c'est que mon script ne gère par les erreurs et quand j'ai pas de fichiers dans mon répertoire cible, j'ai un message d'erreur du type:

Code :
  1. jeudi 28 août 2008, 14:59:35 (UTC+0200)
  2. Null message body; hope that's ok
  3. mv: ne peut évaluer `/home/alandon/Desktop/essaiscript/*': Aucun fichier ou répertoire de ce type


 
 
Dernière chose, je voulais que la date soit envoyé dans le mail mais je ne sais pas comment faire.

Message cité 1 fois
Message édité par alandon le 28-08-2008 à 19:34:20
n°1780669
jer8910
Posté le 31-08-2008 à 20:15:16  profilanswer
 


Salut ,  
Il existe une commande en batch, pour détecter si un fichier existe ou non, je sais que ça répondra pas à ta question mais bon, sa peu aider les autres  :p  
 

Code :
  1. @echo off
  2. IF EXIST %systemroot%\system32\allo1.exe (echo Le fichier allo1 du répertoire system32 existe >>rapport.txt) ELSE (echo Le fichier allo1 du répertoire system32 n'existe pas >>rapport.txt)


*le rapport est créé sur le bureau  
 
À bientot  :hello:  

n°1780699
alandon
Posté le 31-08-2008 à 20:43:49  profilanswer
 

comme tu l'a si bien dit, ça ne répond pas à ma question mais merci d'avoir relancé mon sujet en même temps.
Par contre, moi c'est du shell et non du batch.

mood
Publicité
Posté le 31-08-2008 à 20:43:49  profilanswer
 

n°1783286
Sve@r
Posté le 05-09-2008 à 20:12:16  profilanswer
 

alandon a écrit :

Je reviens à la charge parce que j'ai bossé dessus et donc j'ai des questions pour vous.
L'objectif a légèrement changé, je veux pouvoir détecter la présence de nouveau fichiers dans un répertoire, si fichier existe, on copie la liste des fichiers dans un .txt.


 
C'est bien "nouveaux" par rapport à ceux déjà notés dans ladite liste n'est ce pas ???

Code :
  1. #!/bin/bash
  2. # Traitement du répertoire
  3. ls rep |while read file
  4. do
  5.    # Si le fichier en question n est pas présent dans la liste, on le rajoute
  6.    grep "$file" liste.txt 1>/dev/null || echo $file >>liste.txt
  7. done


 

alandon a écrit :

Ensuite on envoie cette liste de fichiers qui se trouvent dans le txt par mail à mon adresse.


Code :
  1. cat liste.txt |mail machin@truc


 

alandon a écrit :

Et au final, on bouge les fichiers dans un autre répertoire.


Code :
  1. cat liste.txt |while read file
  2. do
  3.     mv rep/$file rep2/$file
  4. done


 

alandon a écrit :

J'aurais besoin d'aide, parce que j'ai fais un script avec d'autres bouts de codes que j'ai trouvé mais je ne comprend pas toutes les lignes exemple:  
celle ci:

Code :
  1. cut -d" " -f8,9 /home/alandon/Desktop/lololiste.txt > /home/alandon/Desktop/lololiste2.txt |mail ...



Ben tu fais l'effort d'aller lire le man de la commande cut. La seule chose qui me paraisse bizarre, c'est que cette commande est redirigée dans un fichier (ça c'est ok) mais aussi dans un pipe => c'est idiot, le pipe ne recevra rien vu que tout est dans le fichier.
Moi j'aurais écrit

Code :
  1. cut -d" " -f8,9 /home/alandon/Desktop/lololiste.txt > /home/alandon/Desktop/lololiste2.txt && mail ...


Ou alors il y a un détail qui m'échappe...
 

alandon a écrit :

à celle-là y'a une erreur dans le code, je suis quasi sûr, mais ça marche:
 

Code :
  1. mv $i //home/alandon/Desktop/essaiscriptsav/$j


 
 
le problème c'est que mon script ne gère par les erreurs et quand j'ai pas de fichiers dans mon répertoire cible, j'ai un message d'erreur du type:

Code :
  1. jeudi 28 août 2008, 14:59:35 (UTC+0200)
  2. Null message body; hope that's ok
  3. mv: ne peut évaluer `/home/alandon/Desktop/essaiscript/*': Aucun fichier ou répertoire de ce type



Ben la gestion d'erreur c'est aussi un travail. Tu peux vérifier qu'une commande s'est bien exécutée grace à la variable "$?" qui, si elle contient 0, signifie que la dernière commande qui a été exécutée l'a bien été. Donc ça peut être un truc de ce style

Code :
  1. commande machin
  2. if test $? -eq 0
  3. then
  4.     echo truc |mail toto@machin.com
  5. fi


Ou plus simplement

Code :
  1. if commande machin
  2. then
  3.     echo truc |mail toto@machin.com
  4. fi


 
Ou encore plus simple (s'il n'y a qu'une commande à lancer en cas de succès)

Code :
  1. commande machin && echo truc |mail toto@machin.com


 

alandon a écrit :

Dernière chose, je voulais que la date soit envoyé dans le mail mais je ne sais pas comment faire.


Code :
  1. date |mail ...


 
ou bien, si tu veux mettre la date et d'autres trucs avec

Code :
  1. (
  2.   echo truc1
  3.   date
  4.   echo truc2
  5.   echo truc3
  6. ) |mail ...


 
Maintenant, si, au lieu de piocher des bouts de codes auxquels tu pipe que dalle, tu commençais par lire le tuto que j'ai mentionné plus haut ??? 1) tu gagnerais du temps (même si tu commences par en perdre pour lire tu le regagneras amplement par la suite) et 2) tu éviterais d'en faire perdre aux bonnes volontés du fofo...


Message édité par Sve@r le 05-09-2008 à 20:45:55

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Vérifier présence fichier dans 1 répertoire

 

Sujets relatifs
inserer et supprimer des lignes dans un fichier[VS] partager un fichier de class ds plusieurs projets d'une solution
[ANT] Lire un fichier XML[Shell] - Création de comptes a partir d'un fichier txt
se placer dans un fichier.txt en C [ Probléme Résolut ]petit pg pour supprimer certaines propriétés d'un fichier son (mp3)
recuperer le contenu d'un fichierfichier sur lecteur reseau ?
XML-XSL => XML, modification d'un fichier XMLForce download fichier AVI !
Plus de sujets relatifs à : Vérifier présence fichier dans 1 répertoire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR