comment utiliser le script shell vérifiant l'heure de la dernière modification d'un fichier
Question
Je veux savoir si certains fichiers ont été modifiés au cours des trois dernières minutes afin de décider si la cp
réussite a été effectuée et si je devrais exit
ou continuer le script. Comment puis-je faire cela?
Merci
La solution
Vous pouvez obtenir la dernière heure de modification d'un fichier avec stat
et la date du jour avec date
. Vous pouvez utiliser des chaînes de format pour les obtenir toutes les deux en & "Secondes depuis l’époque &" ;:
current=`date +%s`
last_modified=`stat -c "%Y" $file`
Ensuite, il est assez facile de mettre cela dans une condition. Par exemple:
if [ $(($current-$last_modified)) -gt 180 ]; then
echo "old";
else
echo "new";
fi
Autres conseils
La syntaxe de cette instruction if dépend de votre shell, mais pas les commandes de date. J'utilise bash; modifiez si nécessaire.
if [ $(( $(date +%s) - $(date +%s -r <file>) )) -le 180 ]; then
# was modified in last three minutes
else
# was not modified in last three minutes
fi
Le +%s
indique à la date de sortie une heure UNIX (le bit important, c’est qu’il s’agit d’un entier en secondes). Vous pouvez également utiliser stat pour obtenir ces informations - la commande stat -c %Y <file>
est équivalente. Veillez à utiliser %Y
pas %y
pour obtenir un temps utilisable en secondes.
La commande stat vous donnera la dernière heure de modification
stat -c %y <filename>
Rechercher peut générer le nom du fichier s’il a été modifié au cours des 3 dernières minutes.
find file1 -maxdepth 0 -mmin -3
Un changement d'horodatage de fichier n'implique pas vraiment que vous avez été copié avec succès.
Si vous arrivez à corrompre le fichier ou si le système de fichiers manque d'espace,
vous verrez probablement toujours un changement d’horodatage (vous devez le confirmer).
Je ne comprends pas le contexte exact de vos besoins.
Si vous déclenchez un cp
, il se termine et retourne - il ne retourne pas tant qu'il fonctionne.
Ainsi, le retour (avec le code de sortie de succès) n'est-il pas un bon indicateur de succès?
Comment et pourquoi quitterait-il en partie au sein d'une <=> opération?
Ou est-ce un script batch <=> qui parcourt la liste des fichiers ...
des précisions aideraient.