[Shell] Date modification contenue d'un repertoire (résolue)
[Shell] Date modification contenue d'un repertoire (résolue)
Bonjour,
Juste une question rapide dont je ne trouves pas de réponse sur moteur de recherche: Es qu'il existe un moyen de connaitre la date de dernière modification du contenue d'un répertoire sans avoir à parcourir tout le répertoire(trop long), en gros la date de modification du dernier fichier modifié dans le répertoire ?
Juste une question rapide dont je ne trouves pas de réponse sur moteur de recherche: Es qu'il existe un moyen de connaitre la date de dernière modification du contenue d'un répertoire sans avoir à parcourir tout le répertoire(trop long), en gros la date de modification du dernier fichier modifié dans le répertoire ?
Dernière modification par Niidhogg le dim. 13 nov. 2016, 21:28, modifié 1 fois.
- benjarobin
- Maître du Kyudo
- Messages : 17288
- Inscription : sam. 30 mai 2009, 15:48
- Localisation : Lyon
Re: [Shell] Date modification contenue d'un repertoire
Bonjour, via une recherche rapide j'ai trouvé ceci : http://stackoverflow.com/questions/5566 ... ory-with-s
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Re: [Shell] Date modification contenue d'un repertoire
Bonsoir.
Il y a aussi tout simplement la commande stat <nom_du_fichier> qui donne ce genre de renseignements.
Il y a aussi tout simplement la commande stat <nom_du_fichier> qui donne ce genre de renseignements.
Tour: Arch (Xfce) 64 Testing: 6-Core: AMD Ryzen 5 2600X type: MT MCP speed: 2152 MHz min/max: 2200/3600 MH
UEFI: American Megatrends v: 3803 date: 01/22/2018
Graphics:
Device-1: AMD Baffin [Radeon RX 460/560D / Pro
450/455/460/555/555X/560/560X]
driver: amdgpu v: kernel
Display: server: X.Org 1.20.8 driver: amdgpu,ati unloaded: modesetting
resolution: 1920x1080~60Hz
OpenGL: renderer: Radeon RX 560 Series
Manjaro en Dual (grub).
UEFI: American Megatrends v: 3803 date: 01/22/2018
Graphics:
Device-1: AMD Baffin [Radeon RX 460/560D / Pro
450/455/460/555/555X/560/560X]
driver: amdgpu v: kernel
Display: server: X.Org 1.20.8 driver: amdgpu,ati unloaded: modesetting
resolution: 1920x1080~60Hz
OpenGL: renderer: Radeon RX 560 Series
Manjaro en Dual (grub).
Re: [Shell] Date modification contenue d'un repertoire
Oui, ok, mais je cherche une méthode qui ne m'impose pas à parcourir tout les fichiers du répertoire mais seulement les répertoires, sinon ce serrait beaucoup trop long, c'est des milliers de fichier pour une application web, donc je ne peut pas me le permettre...
stat renvoie bien st_mtime mais d'après la doc: "Moreover, st_mtime of a directory is changed by the creation or deletion of files in that directory. The st_mtime field is not changed for changes in owner, group, hard link count, or mode." Au pire je me rebattrais exclusivement sur la création d'un nouveau fichier, mais si quelqu'un a une solution pour la modification d'un fichier du répertoire sans regarder chaque fichier exclusivement, ou alors la preuve que ce n'est pas possible ?
stat renvoie bien st_mtime mais d'après la doc: "Moreover, st_mtime of a directory is changed by the creation or deletion of files in that directory. The st_mtime field is not changed for changes in owner, group, hard link count, or mode." Au pire je me rebattrais exclusivement sur la création d'un nouveau fichier, mais si quelqu'un a une solution pour la modification d'un fichier du répertoire sans regarder chaque fichier exclusivement, ou alors la preuve que ce n'est pas possible ?
- benjarobin
- Maître du Kyudo
- Messages : 17288
- Inscription : sam. 30 mai 2009, 15:48
- Localisation : Lyon
Re: [Shell] Date modification contenue d'un repertoire
Ce n'est pas possible (enfin tu es obligé de parcourir récursivement les dossiers), la preuve, je n'en ai pas, à part que c'est logique.
Tu peux en effet, je pense, te baser sur uniquement la date de modification du dossier, et donc tu n'as besoin de parcourir que les dossiers.
Et c'est très rapide de trouver ce que tu veux si tu le code intégralement en python, ne le code pas en bash cela sera bien plus long...
Tu peux en effet, je pense, te baser sur uniquement la date de modification du dossier, et donc tu n'as besoin de parcourir que les dossiers.
Et c'est très rapide de trouver ce que tu veux si tu le code intégralement en python, ne le code pas en bash cela sera bien plus long...
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Re: [Shell] Date modification contenue d'un repertoire
Ok, ca me conviens comme réponse, merci :p
- benjarobin
- Maître du Kyudo
- Messages : 17288
- Inscription : sam. 30 mai 2009, 15:48
- Localisation : Lyon
Re: [Shell] Date modification contenue d'un repertoire (résolue)
Voici un exemple de script en python3 (je ne sais pas s'il a moyen de le coder plus efficacement en python3, je suis plutôt un développeur C bas niveau ) :
Une autre version:
Et puis en C pour aller vraiment plus vite (ici on vérifie même la date des fichiers => Plus rapide et plus fiable) :
Code : Tout sélectionner
import os
import time
dirScan = '.'
newestDirTime = 0;
newestDirPath = '';
for x in os.fwalk(dirScan):
statInfo = os.fstat(x[3])
if statInfo.st_mtime > newestDirTime:
newestDirPath = x[0]
newestDirTime = statInfo.st_mtime
print(newestDirPath)
print(time.strftime("%Y/%m/%d %H:%M:%S",time.localtime(newestDirTime)))
Code : Tout sélectionner
import os
import time
dirScan = '.'
newestDirTime = 0;
newestDirPath = '';
def findNewestDir(d):
global newestDirTime, newestDirPath
statInfo = os.stat(d)
if statInfo.st_mtime > newestDirTime:
newestDirPath = d
newestDirTime = statInfo.st_mtime
for x in os.listdir(d):
x = os.path.join(d,x)
if os.path.isdir(x):
findNewestDir(x)
findNewestDir(dirScan)
print(newestDirPath)
print(time.strftime("%Y/%m/%d %H:%M:%S",time.localtime(newestDirTime)))
Code : Tout sélectionner
#define _XOPEN_SOURCE 700
#include <stdlib.h>
#include <unistd.h>
#include <ftw.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
static time_t newestDirTime = 0;
int search_in_entry(const char *filepath, const struct stat *info,
const int typeflag, struct FTW *pathinfo)
{
if (info->st_mtime > newestDirTime)
{
newestDirTime = info->st_mtime;
}
return 0;
}
int search_newest_file(const char *const dirpath)
{
/* Invalid directory path? */
if (dirpath == NULL || *dirpath == '\0')
return -1;
return nftw(dirpath, search_in_entry, 15, FTW_PHYS);
}
int main(int argc, char *argv[])
{
int i;
char buffer[64];
if (argc < 2) {
if (search_newest_file(".")) {
fprintf(stderr, "%s.\n", strerror(errno));
return EXIT_FAILURE;
}
} else {
for (i = 1; i < argc; i++) {
if (search_newest_file(argv[i])) {
fprintf(stderr, "%s.\n", strerror(errno));
return EXIT_FAILURE;
}
}
}
strftime(buffer, 64, "%Y:%m:%d %H:%M:%S", localtime(&newestDirTime));
printf("%lu : %s\n", newestDirTime, buffer);
return EXIT_SUCCESS;
}
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
- RoyalPanda
- yeomen
- Messages : 239
- Inscription : lun. 19 mai 2014, 09:08
Re: [Shell] Date modification contenue d'un repertoire (résolue)
Sinon, en prenant le problème autrement, tu peux surveiller toutes les modifications du FS sur un répertoire donné.
1 exemple la : http://reflexioninformatique.fr/surveil ... rotection/
1 exemple la : http://reflexioninformatique.fr/surveil ... rotection/