-1 votes

Comment afficher la dernière date de modification de tous les fichiers d'un répertoire donné ?

Comme le montre cette liste par ordre chronologique inverse, le dernier fichier ou sous-répertoire de '.' a été modifié le 12 avril, mais la date de modification indiquée sur le répertoire lui-même est le 17 avril. J'aurais besoin de lister les entrées des dossiers en fonction de la dernière date de modification de n'importe lequel des fichiers qu'ils contiennent (les répertoires pourraient être plus délicats ). Est-ce possible de le faire ?

$ ls -lrta ../hercl.src
..
drwxr-xr-x   9 steve  staff    288 Mar  8 07:48 .idea
drwxr-xr-x  15 steve  staff    480 Apr 12 16:40 .git
drwxr-xr-x  24 steve  staff    768 Apr 17 12:16 .    ## Newer than latest file modified date..

So the "ask" would be to return April 12 not April 17th.

0voto

WestCoastProjects Points 4532

J'ai écrit un utilitaire pour descendre dans les sous-répertoires et extraire la date la plus récente d'une modification. fichier et ensuite utiliser cette date pour représenter le répertoire global des ancêtres.

#!/usr/bin/env python
import sys
def lsd(fname):
    def lsdRec(fname):
        from pathlib import Path
        from operator import itemgetter
        import os
        fpath = Path(fname)
        fs = list(fpath.glob('*'))
        if not fs:
            return []
        else:
            def getLast(lst): 
                x = lst[-1] if lst else [None,0]
                return x

            def getModified(fpath):
                try:
                    return os.path.getmtime(str(fpath.resolve()))

                except Exception as e:
                    print(f"Error on {fpath}: {e}")
                    return 0

            fl = sorted([ getLast(lsdRec(f)) if f.is_dir() 
                else [f,getModified(f)] for f in fs],key=itemgetter(1))
            return fl
    rst = lsdRec(fname)
    from datetime import datetime
    outLst = ([ [ str(x[0])[len(str(fname))-1:], 
        datetime.fromtimestamp(x[1]).strftime('%Y-%m-%d %H:%M:%S')] for x in rst])
    out = '\n'.join(['\t'.join([x[1],x[0]]) for x in outLst])
    return out

if len(sys.argv) < 2:
    print(f"sys.argv {sys.argv}")
    print("""
Usage: lsd <directory>

Prints the files and subdirectories according to last modified date of contents
""")
    sys.exit(1)

dir=sys.argv[1]
print(lsd(dir))

La sortie montre le fichier dans chaque sous-répertoire qui a la date de modification la plus récente . La sortie montre donc le chemin d'accès complet, y compris les sous-répertoires. Cela me plaît !

2022-03-07 16:40:48 x/hercl-0.3.2/setup.cfg
2022-04-20 16:15:25 x/y/z/zz/thereThere

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X