#1 Le 29/05/2014, à 13:45
- omnimax
problème script surveillance dernier fichier
Bonjour j'aimerai automatiser l'envoi d'un mail dès que l'on ajoute un fichier sur Dropbox.
Voilà l'ébauche de mon script.
#!/bin/bash
#dropboxalert
empl=$HOME/Dropbox/
while inotifywait -e create "$empl"; do
sleep 10s # je rajoute ceci pour être sûr que le fichier soit correctement copié
fic=$(ls -R -c -t -I dropboxalert -I dropboxalert~ --reverse "$empl" | tail -n 1) # j'écarte avec -I le nom du script et de sa copie auto car avec les test je l'enregistre souvent
echo "$fic"
done
exit 0
inotifywait marche parfaitement et me retourne automatiquement le fichier créé.
par contre
fic=$(ls -R -c -t -I dropboxalert -I dropboxalert~ --reverse "$empl" | tail -n 1)
echo "$fic"
ne me renvoi pas le dernier fichier mais l'avant dernier....:( on dirait que le simple fait de lister avec ls change le dernier fichier ajouté ???
si qqun peux éclairer ma lanterne ...Merci
Dernière modification par omnimax (Le 29/05/2014, à 13:49)
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#2 Le 29/05/2014, à 15:16
- Nolanux
Re : problème script surveillance dernier fichier
Et si tu essaie ceci ?
ls -Rltc
D'après le man, il semblerait que tu doives ajouter l'option -lt avec -c pour pouvoir trier en utilisant le paramètre Ctime, si tu utilise uniquement l'opion -l il affiche Ctime, mais il trie par le nom
Pas démonter Numéro 5 !
"Short Circuit"
Hors ligne
#3 Le 29/05/2014, à 19:20
- omnimax
Re : problème script surveillance dernier fichier
j'ai essayé mais ta soluce ne fonctionne pas non plus. c'est vraiment bizarre;
d'habitude je fais souvent pour avoir le dernier fichier:
ls -c --color=auto -l -t -h --reverse
et cela marche très bien dans ce cas mais via mon script cela ne donne pas le même résultat.
J'ai trouvé ceci plus pompeux mais qui fonctionne
#!/bin/bash
empl=$HOME/Dropbox/
coucou=$HOME/Bureau/list
while inotifywait -e create "$empl" > "$coucou"; do
list=$(cat "$coucou")
echo "$list"
done
exit 0
Dernière modification par omnimax (Le 29/05/2014, à 20:15)
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#4 Le 29/05/2014, à 19:29
- Nolanux
Re : problème script surveillance dernier fichier
bizarre oui, parce qu'ici, ça fonctionne ... Je viens d'essayer de nouveau.
tu n'aurais pas créé un alias entre temps ?
Dernière modification par Nolanux (Le 29/05/2014, à 19:30)
Pas démonter Numéro 5 !
"Short Circuit"
Hors ligne
#5 Le 29/05/2014, à 20:59
- omnimax
Re : problème script surveillance dernier fichier
non mon ls n'a pas un alias ls
je viens de reproduire l'erreur
touch coucou
CHEMIN: /home/omnimax DATE: jeu 29 mai 21:00:09
--> ls -c --color=auto -l -t -h --reverse -R | tail -n 1
-rw-r--r-- 1 syst syst 111M mai 28 20:16 BONUS.zip
CHEMIN: /home/omnimax DATE: jeu 29 mai 21:00:11
-->
et coucou a bien été créé.
j'aimerai vraiment comprendre le pourquoi.
Dernière modification par omnimax (Le 29/05/2014, à 21:00)
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#6 Le 29/05/2014, à 21:09
- omnimax
Re : problème script surveillance dernier fichier
j'ai compris l'erreur mais sans savoir la résoudre
ls -R
va chercher récursivement mais sans trier l'ensemble des dossiers par date, seul le dernier résultat sera juste avec
ls -c --color=auto -l -t -h --reverse
il faudrait pouvoir trier le résultat de ls -R par date puis appliquer le dernier en date
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#7 Le 29/05/2014, à 21:10
- omnimax
Re : problème script surveillance dernier fichier
trouvé !
ls -c --color=auto -l -t -h --reverse -R | ls -c --color=auto -l -t -h --reverse | tail -n 1
Dernière modification par omnimax (Le 29/05/2014, à 21:10)
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#8 Le 29/05/2014, à 21:40
- Watael
Re : problème script surveillance dernier fichier
salut,
ls est une des rares commandes qui "ne lit pas son entrée standard" (je ne saurais pas l'expliquer), ceci implique que le second ls ne lit aucunes données venant du premier
par exemple :
$ ls ./
fichier1 fichier2
$ echo $HOME | ls
fichier1 fichier2
Dernière modification par Watael (Le 29/05/2014, à 21:41)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#9 Le 29/05/2014, à 21:43
- pingouinux
Re : problème script surveillance dernier fichier
Bonsoir,
Ceci devrait marcher aussi :
ls -clthR --color=auto --time-style=+"%Y%m%d%H%M%S" tst| sort -k6 | tail -1
Je ne comprends pas comment fonctionne ta commande en #7. Pour moi, les 2 commandes suivantes sont équivalentes :
ls -c --color=auto -l -t -h --reverse -R | ls -c --color=auto -l -t -h --reverse | tail -n 1
ls -c --color=auto -l -t -h --reverse | tail -n 1
Édité : Trop rapide, Watael
Dernière modification par pingouinux (Le 29/05/2014, à 21:44)
Hors ligne
#10 Le 29/05/2014, à 21:59
- Postmortem
Re : problème script surveillance dernier fichier
Bonsoir,
Pour éviter de remonter la création d'un fichier particulier :
inotifywait -e create --exclude "^/tmp/test/ff$" /tmp/test
Ça remonte les fichiers créés dans /tmp/test sauf si le fichier est /tmp/test/ff.
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#11 Le 29/05/2014, à 22:06
- pingouinux
Re : problème script surveillance dernier fichier
Un peu plus simple que ma proposition en #9 :
ls -clthR --time-style=+"%s" | sort -nk6 | tail -1
Hors ligne
#12 Le 29/05/2014, à 22:27
- omnimax
Re : problème script surveillance dernier fichier
merci mais cela ne fonctionne toujours pas
noté postmortem pour l'option exclude
#!/bin/bash
#dropboxalert
empl=$HOME
while inotifywait -e create "$empl"/*
do
essai=$(ls -clthR --time-style=+"%s" | sort -nk6 | tail -1)
echo "$essai"
done
exit 0
touch coucou
résultat :
/home/omnimax/ CREATE coucou
-rwxr-xr-x 1 omnimax omnimax 301 1401395267 dropboxalert~
Dernière modification par omnimax (Le 29/05/2014, à 22:37)
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#13 Le 29/05/2014, à 22:37
- pingouinux
Re : problème script surveillance dernier fichier
C'est sans doute que tu as plusieurs fichiers qui ont même date et même heure à la seconde près.
(tu peux essayer avec tail -n 5, par exemple)
Dernière modification par pingouinux (Le 29/05/2014, à 22:38)
Hors ligne
#14 Le 29/05/2014, à 22:56
- Postmortem
Re : problème script surveillance dernier fichier
Tu pourrais faire comme ça :
while fic=$(inotifywait -e create /tmp/test --format %w%f)
do
ls -lc "$fic"
done
Ainsi, tu fais le ls que sur le fichier nouvellement créé.
Je pense que le "ls -clt" donne un classement bizarre car -c ne donne pas la date de création mais la date de dernier changement de statut.
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#15 Le 29/05/2014, à 23:08
- Watael
Re : problème script surveillance dernier fichier
ls -lc fichier
ce seul fichier sera effectivement correctement trié selon sa date de modification.
sauf que... un seul fichier ne peut pas être trié.
Dernière modification par Watael (Le 29/05/2014, à 23:09)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#16 Le 29/05/2014, à 23:25
- Postmortem
Re : problème script surveillance dernier fichier
Non mais de ce que j'ai compris, il veut les infos du fichier nouvellement créé, donc autant faire le ls seulement sur lui plutôt que d'essayer de trier pour sortir le dernier fichier !
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#17 Le 29/05/2014, à 23:53
- Watael
Re : problème script surveillance dernier fichier
on est presque vendredi
moi, je ferais comme ça:
while inotifywait -e create ./; do stat -c '%Y %n' ./* |sort -k1,1n | cut -d ' ' -f2 | tail -n1; done
ça à l'air de fonctionner.
je préfère stat, dont je maîtrise le format d'affichage, quitte à lui adjoindre un sort.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#18 Le 30/05/2014, à 00:04
- Postmortem
Re : problème script surveillance dernier fichier
Mais pourquoi s'embêter avec le tri alors qu'inotifywait peut sortir directement le nom qu'on veut ?
Une fois le nom récupéré, on utilise stat, ls ou ce qu'on veut sur le fichier.
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#19 Le 30/05/2014, à 00:05
- Watael
Re : problème script surveillance dernier fichier
tout à fait.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#20 Le 30/05/2014, à 00:40
- Watael
Re : problème script surveillance dernier fichier
inotifywait -m --format '%w%f : blabla si nécessaire' -e create ./ | stdbuf -oL cat - | while read line; do mail -s inotifyEvent $USER <<<"$line"; done
peut être.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#21 Le 30/05/2014, à 10:02
- omnimax
Re : problème script surveillance dernier fichier
merci Watael, pingouinux et postmortem pour toutes vos réponses, entre temps j'avais trouvé ceci qui fonctionne (merci pingouinux pour sed)
#!/bin/bash
empl=$HOME
log=$HOME/Bureau/list
mail=maildudestinataire
while inotifywait -e create "$empl"/* > "$log"
do
list=$(cat "$log" | sed 's/ CREATE//')
echo -e ""$list" a été ajouté à votre dropbox\n Ceci est un mail automatique" | msmtp "$mail"}
done
exit 0
mais c'est clair que c'est bien plus joli et court la soluce de postmortem
#!/bin/bash
mail=maildudestinataire
log=$HOME/Dropbox/log
while fic=$(inotifywait -e create $HOME/ --format %w%f)
do
echo "$fic a été ajouté à votre dropbox\n Ceci est un mail automatique" | msmtp "$mail"
ls -l "$fic" > $log # pour garder une trace de l'activité et c'est vrai que -c n'a plus d'intérêt
done
exit 0
Dernière modification par omnimax (Le 30/05/2014, à 10:06)
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#22 Le 30/05/2014, à 10:16
- Brunod
Re : problème script surveillance dernier fichier
Je n'ai pas tout compris : il ne suffit pas de détecter si il y a au moins un fichier en plus.
Un truc du style
(ls|wc) >mem.txt
puis if (ls|wc) <> cat mem.txt
ne marcherait pas ?
Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis
Hors ligne
#23 Le 30/05/2014, à 14:58
- Postmortem
Re : problème script surveillance dernier fichier
Salut,
Je n'ai pas tout compris : il ne suffit pas de détecter si il y a au moins un fichier en plus.
Un truc du style
(ls|wc) >mem.txt
puis if (ls|wc) <> cat mem.txt
ne marcherait pas ?
A ce moment là, il n'y a plus aucun intérêt à utiliser inotifywait alors que ce dernier est fait pour ça.
Et surtout, inotifywait permet de récupérer le nom du fichier créé proprement.
Il peut aussi envoyer des événements sur la suppression ou la modification d'un fichier.
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#24 Le 30/05/2014, à 15:18
- Brunod
Re : problème script surveillance dernier fichier
Merci !
Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis
Hors ligne
#25 Le 02/06/2014, à 12:23
- omnimax
Re : problème script surveillance dernier fichier
Salut,
Voilà mon script est fonctionnel mais seulement en local, lorsque je l'exécute via le réseau il me met permission denied.
je l'ai lancé en
sudo ./dropalert
mais résultat identique.
C'est bizarre car j'ai les droits sur ce réseau puisque je peux créer et supprimer dossiers/fichiers. J'ai consulté le man d'inotifywait mais je n'ai rien vu à ce sujet.
Vous avez une idée ?
ps : les print$6 et print$7 doivent être ajustés en fonction du chemin réseau.
#!/bin/bash
#dropalert
mail="maildestinataire"
path="/run/user/1000/gvfs/smb-share:server=192.168.1.200,share=data/Clients/IPAD"
while fic=$(inotifywait -e create "$path" -r --format %w%f); do
#sleep 60s
rep=$(awk -F "/" '{print $6}' <<< "$fic")
fichier=$(awk -F "/" '{print $7}' <<< "$fic")
txt=$(echo -e "Subject : Un nouveau fichier est apparu sur votre Dropbox !\n\nDans le dossier \e[1m"$rep"\e[21m, il s'agit du fichier : \e[1m"$fichier"\n\n\e[21mCe mail est automatisé.")
echo "$txt" | msmtp "$mail"
done
exit 0
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne