[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: détecter un nouveau répertoire#



Le 23/07/15 à 11:39, (•‿•)  Dhénin Jean-Jacques <dhenin@gmail.com> a écrit :

(DJJ> $ more Vazy
(DJJ> find . -newer Fantome -type d  | egrep -v '^\.$'
(DJJ> touch Fantome
(DJJ> 
(DJJ> --------
(DJJ> 
(DJJ> Le fichier Fantome sert de sentinelle.
(DJJ> Si un répertoire a été créé find le signale
(DJJ> et de toute façon la sentinelle se repositionne à une date plus recente.

Ça me parait une meilleure solution que de faire des diff sur des listes de dossiers à des
dates différentes

Ce que Jean-Jacques propose, c'est de lancer un script +/- régulièrement, qui sort tous les
dossiers créés depuis le dernier lancement.

Il utilise le fichier "Fantome" comme mémoire du dernier lancement (sa date de modification)

Dans un script plus complet, ça donnerait qqchose comme

# le nom du fichier dont la date de modif correspond au dernier lancement
# qui pourrait être aussi /tmp/$(basename $0).last (si ce fichier s'appelle toto.sh ça
# vaudra /tmp/toto.sh.last, mais ça peut être n'importe quel fichier, pourvu que personne
# d'autre n'y touche
fichierTest=Fantome

# différentes manières de virer le dossier .
#find . -newer $fichierTest -type d  | grep -v '^.$'i
#find . -newer $fichierTest -type d  | egrep -v '^\.$'
#find . -type d -name '??*' # seulement les dossiers de plus de 1 caractère

# mais si on veut virer le ./ de chaque fichier autant demander à sed
# /^\.$/ pour désigner "."
# d pour l'effacer
# s@^\./@@ pour remplacer ./ par rien 
# (@ est un caractère arbitraire, pas / pour éviter de l'échapper avec /^\.\///)
find . -newer $fichierTest -type d | sed -e '/^\.$/d; s@^\./@@' | while read dossier
do
  # ici le script qui traite les dossier 1 par 1 avec $dossier
done

# Et si c'est juste pour envoyer la liste par mail
sujet="nouveaux dossier créés depuis $(date -r Fantome '+%F %T')"
dest=toto@domaine.tld
find . -newer $fichierTest -type d | sed -e '/^\.$/d; s/^\.\///' | mail -s "$sujet" $dest

# Pour éviter les mails vides on stocke dans une chaine
liste=$(find . -newer $fichierTest -type d | sed -e '/^\.$/d; s/^\.\///')

# on envoie si elle n'est pas vide
[ -n "$liste" ] && echo "$liste"|mail -s "$sujet" $dest

# à la fin on reset la date de modif du fichier Fantome
touch $fichierTest

# pour éviter d'oublier un dossier qui serait créé pendant le traitement de résultat du find
# il faudrait mémoriser la date du fichier au début (man touch pour le format dont on aura
# besoin)
lancement=$(date '+%Y%m%d%H%M.%S')
# lancer find et traitement

# mettre la date du début du lancement de ce script
touch -t $lancement $fichierTest

Et ensuite lancer de script au rythme où on veut être prévenu

-- 
Daniel

Il faut toute une vie pour apprendre à vivre.
Sénèque.


Reply to: