Script bash permettant de voir si un dossier est à la date du jour et qui affiche OK

bonjour
j’aimerai un script bash qui check la date du jour d’un dossier repertoire01 et qui envoit OK si la date du jour correspond/

drwxr-x—. 2 apache apache 1904640 29 déc. 15:08 repertoire01

j’ai aucune connaissance en bash du coup si vous pouvez m’aider pour des pistes merci

Bonjour,
C’est la date de dernière modification que tu veux?
Car il y a trois date il me semble:
ctime, atime et mtime: création, accès et modification.
Mais tu peux utiliser la fonction stat :

# stat /home
  Fichier : /home
   Taille : 4096        Blocs : 8          Blocs d'E/S : 4096   répertoire
Périphérique : fe02h/65026d     Inœud : 2           Liens : 5
Accès : (0755/drwxr-xr-x)  UID : (    0/    root)   GID : (    0/    root)
 Accès : 2020-12-29 07:39:36.299181138 +0100
Modif. : 2020-11-05 12:50:00.636712432 +0100
Changt : 2020-11-05 12:50:00.636712432 +0100
  Créé : -

En utilisant l’option -c / --format= ou --printf=
Pour atime:

#stat --format='%x'
2020-12-29 07:39:36.299181138 +0100

man stat pour avoir toutes les options de format

un exemple:

#!/bin/bash
file=$1
FNAME=`echo $0"[$file]"`
if [[ -z $file]] || [[ "$file" = "" ]]; then
        echo "$FNAME: Error: prefix parameter not set."
        exit 1
fi
if [[ ! -f $file]]; then
        echo "$FNAME: Error: fil $file doesn't exist."
        exit 1
fi
ACTUALDATE=`date +%Y-%m-%d-%H:%M:%S`
FILEDATE=`stat --format='%x' $file| grep -oE '[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}'`

if [[ "$ACTUALDATE" = "$FILEDATE" ]]; then
    echo "Date is OK"
fi

merci bcp pour ton retour
je souhaite la date de modification du dossier( le but cest juste de savoir si je recois bien des données chaque jour dans de ce dossier si cest pas le cas cest dc que le dossier ne se met pas à jour ds la journee cest qu il n y a pas eu de depot… le but est de mettre une alerte zabbix ou autre par la suite pour m alerter)
=> cest qu au final un hyperviseur zabbix ou autre lance le script affiche ok si datedujour=date dossier (juste le jour pas besoin de lheure) et nok sinon

tes fichiers viennent d’où? quel genre de fichiers est-ce? est-ce une synchro d’une source quelconque? ou des fichiers déposés par exemple par des utilisateurs?
As tu un traitement sur ces fichiers?

une autre solution peux aussi consister à faire un checksum sur les ficheirs et de faire un diff entre le checksum precedent et le checksum courant, et ca te donne la liste des nouveaux fichiers, s’il n’y en a pas c’est que tu n’as pas eu de nouveaux fichiers.

Tu peux faire le fichier avec:

find -follow -type f ! -name md5sum.txt -print0 | xargs -0 md5sum > md5sum.txt

Quand tu as comparé ton fichier avec l’ancien, tu efface l’ancien, et change le nom du dernier.

ca provient dun fournisseur externe via ftp ce sont des fichiers qui arrivent chaque jour ( pas besoin detre hyper precis sur le nombre de fichier) simplemnt sassurer qu il y a eu d depot chaque jour ( lancer le script simplement une a 2 fois par jour) pr voir si la date de modification.correspond à la date du jour.

C’est le(s) même(s) fichier tous les jours (même nom?)?
car sinon c est facile, tu fait une liste des fichiers à minuit, tu la compare à celui du jour précédent.
Le résultat te donne les ficheirs reçus.
si les noms sont identiques, alors le checksum fera l’affaire, car le même fichier avec des contenu différent ou simplement une date différente aura un checksum différent.
Ensuite suffit de comparer le contenu des checksum. C’est plus simple et nettement plus rapide que de faire un script avec les dates etc… Juste quelques commandes à faire.

bonjour
justement je ne veux pas la liste des fichiers reçu, je veux juste savoir si le dossier a modifié sa date du jour… le but cest juste denvoyer un ok ou ko à un hyperviseur de supervision, l hyperviseur peut lancer le script sur la machine et recuperer ce ok ou ko pr lafficher

Bonjour

La dernière modification du répertoire ~/repTest/ a été faite le 29 décembre à 03:21
quand le fichier ~/repTest/fichier.txt y a été créé :

michel@ubuT450:~$ ls -la ~/repTest/
total 8
drwxrwxr-x  2 michel michel 4096 déc.  29 03:21 .
drwxr-xr-x 20 michel michel 4096 déc.  30 09:02 ..
-rw-rw-r--  1 michel michel    0 déc.  29 03:21 fichier.txt
michel@ubuT450:~$ 

Je créé une variable qui contient la date/heure d’il y a un jour
et une autre qui contiendra la date/heure de dernière modification du répertoire ~/repTest/

michel@ubuT450:~$ ilYa24heures=$(date -d '-1 day' '+%s')
michel@ubuT450:~$ dernModif=$(stat --format='%Y' ~/repTest/)
michel@ubuT450:~$ 

Je compare les valeurs des variables
pour savoir si le fichier a été modifié ces dernières 24 heures

michel@ubuT450:~$ [ $dernModif -gt $ilYa24heures ] && echo "Ok" || echo "Ko"
Ko
michel@ubuT450:~$ 

Je créé un fichier dans le répertoire :

michel@ubuT450:~$ touch ~/repTest/fichierTest.txt
michel@ubuT450:~$ 

Je mets à jour les variables et je les compare :

michel@ubuT450:~$ dernModif=$(stat --format='%Y' ~/repTest/)
michel@ubuT450:~$ ilYa24heures=$(date -d '-1 day' '+%s')
michel@ubuT450:~$ [ $dernModif -gt $ilYa24heures ] && echo "Ok " || echo "Ko"
Ok 
michel@ubuT450:~$ 
1 J'aime

simplement précis. simplement écris ! :stuck_out_tongue: :smiley:

je suis totalement novice en script… dsl
du coup je commence par #!bin/bash
puis je note toutes tes commandes à la fin j’ai soit Ok ou Ko en resultat

Toutes ces lignes, c’était juste pour décrire un peu le fonctionnement,
sinon, en une ligne, ça donnerait simplement :

[ $(stat --format='%Y' /chemin/repertoire01/) -gt $(date -d '-1 day' '+%s') ] && echo "Ok" || echo "Ko"

ce qui affichera : Ok si repertoire01 a été modifié ces dernières 24 heures
et qui affichera : Ko si repertoire01 n’a pas été modifié durant ces dernières 24 heures

1 J'aime

Je n’avais pas fait attention,
mais tu as sans doute fait une petite erreur de frappe,
car la première ligne d’un script que l’on voudrait voir être interprété par bash
devrait plutôt être :

#!/bin/bash

Pour info, dans un script,
cette première ligne est nommée shebang

1 J'aime

bonjour
merci bcp effectivement j’avais pas vu le /
je le test aujourd’hui

merci ça marche tres bien!
juste pour ma compréhension tu dis que tu compare les 2 valeurs « derniere modif » et « dateilya24h »
pourquoi ‹ %Y › qui correspond à l’année? et non pas le temps ‹ +%s ›= temps UTC depuis 1970… comme dans ta variable il y a 24H?
lorsque tu compares avec le ‹ -gt › veut dire quoi si les 2 valeurs sont différentes alors fichier bien modifié? si temps >0 alors il y a eu modification?
merci de ton aide

Bonjour

Tu as confondu les options de la commande date et de la commande stat

Extrait de la sortie de la ligne de commande :

man stat
…
       %Y     time of last data modification, seconds since Epoch
…

greater than

Extrait de la sortie de la ligne de commande :

man test
…
       INTEGER1 -gt INTEGER2
              INTEGER1 is greater than INTEGER2
…
1 J'aime

merci bcp ! c’est bcp plus clair

Pour info, la commande [
est équivalente à la commande test
comme on peut le voir en faisant :

man [

dont le retour est le même que :

man test
1 J'aime