bonne idée ce topic, je m'abonne et je poste celui-ci qui permet de lister les derniers fichiers modifiés dans un dossier (et ses sous-dossiers) passé en paramètre. Si il y a plus simple en bash ou autre, je suis preneur 😃
(Je m'en sers pour afficher les résultats dans un conky)
#!/usr/bin/env python
# coding=latin-1
#script permettant de lister les derniers fichiers modifiés dans un répertoire
#et ses sous-répertoires
#paramètre 1 : chemin du dossier
#paramètre 2 : nb de fichiers à afficher
#paramètre 3 : filtre sur les noms de fichiers à ne pas afficher
# (facultatif,séparés par des virgules)
import sys, os
import string
from datetime import date, datetime
from stat import *
import math
def lister(rep,repRacine):
#liste les fichiers d'un répertoire, récurisivement
#retourne un tableau de ces fichiers (path+name)
for filename in os.listdir(rep):
#print ("--")
pathname = os.path.join(rep, filename)
#print (pathname)
mode=os.stat(pathname)[ST_MODE]
if S_ISREG(mode):
if flagFiltre:
flag=False
for i in listeFiltres:
if filename.lower().find(i.lower()) !=-1:
flag=True
break
if not flag:
arrRes.append([os.stat(pathname).st_mtime,pathname])
else:
arrRes.append([os.stat(pathname).st_mtime,pathname])
if S_ISDIR(mode):
lister(pathname,repRacine)
return arrRes
if __name__ == '__main__':
#initialisation des tableaux
arrRes=[] #tableau de résultats après lecture d'un répertoire
#si nb arg incorrect?
if len(sys.argv)<3:
print u"\nNb d'arguments incorrects : "
print u"\t1-répertoire à scruter"
print u"\t2-nb de fichiers à afficher"
print u"\t3-filtres sur noms de fichiers "+ \
"(facultatif, séparés par des virgules)\n"
exit()
else:
#récupère le répertoire
rep0=sys.argv[1]
nb=sys.argv[2]
if not os.path.exists(rep0):
print rep0+ " : répertoire non valide, interruption"
exit()
if not nb.isdigit():
print nb + " : nombre entier non valide"
exit()
nb=int(nb)
#liste les filtres
flagFiltre=False
if len(sys.argv)==4:
listeFiltres=sys.argv[3].split(",")
flagFiltre=True
print
arrList=lister(rep0,rep0)
arrList.sort()
if nb>len(arrList):
nb=len(arrList)
#calule la largeur maxi de la colonne "Dossier"
lengthD=0
lengthN=0
for f in range(1,nb+1):
x= arrList[-f]
lengthD=max(len(os.path.dirname(x[1])),lengthD)
lengthN=max(len(os.path.basename(x[1])),lengthN)
for f in range(1,nb+1):
x= arrList[-f]
bname = os.path.basename(x[1])
dname = os.path.dirname(x[1])
sname = os.path.getsize(x[1])
if sname<1024 :
sname = str(sname) + " o"
elif sname<1024*1024:
sname = str(sname/1024) + " Ko"
elif sname<math.pow(1024,3):
sname = "%.1f" %(sname/math.pow(1024,2)) + " Mo"
elif sname<math.pow(1024,4):
sname = "%.1f" %(sname/math.pow(1024,3)) + " Go"
print datetime.fromtimestamp(x[0]),string.replace(dname,rep0,"")+ \
" "*(lengthD-len(dname)),bname+" "*(lengthN-len(bname)), \
" "*(10-len(sname))+sname
En sortie, on a 4 colonnes : date/heure; dossier, nom du fichier, taille. Par contre je n'arrive pas à avoir la dernière colonne bien alignée quand il y a des accents dans le nom de fichier ...